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:30 UTC

[sling-org-apache-sling-app-cms] branch master updated (b75e689 -> 8edd387)

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

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


    from b75e689  Adding support for general thumbnail generation via Tika text extraction and powerpoints via POI
     new 0fafcbe  Set the context classloader to the Sling Dynamic ClassLoader to fix an issue with generating PPT thumbnails
     new 10a39a4  Organized dependencies and updating to Commons Lang 3
     new 553b3ab  More Commons Lang 3 Cleanup
     new c2ac4e9  Updating to the latest release of Commons HTML
     new 3b5cfc6  Adding NOTICE for Metadata Extractor and Thumbnailator
     new a431d97  Updating builder dependencies
     new 3c4c25d  Separating out the thumbnail handling to a separate bundle
     new 8edd387  Fixing spelling mistakes

The 8 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 NOTICE                                             |  11 +
 api/pom.xml                                        |  12 +-
 .../main/java/org/apache/sling/cms/CMSUtils.java   |   2 +-
 .../main/java/org/apache/sling/cms/Reference.java  |   2 +-
 builder/src/main/provisioning/oak.txt              |   2 +-
 builder/src/main/provisioning/repoinit.txt         |   4 +-
 builder/src/main/provisioning/sling-rewriter.txt   |   3 +-
 builder/src/main/provisioning/sling.txt            |   2 +-
 core/pom.xml                                       |   8 +-
 .../core/internal/filters/CMSSecurityFilter.java   |   4 +-
 .../core/internal/filters/EditIncludeFilter.java   |   2 +-
 .../cms/core/internal/filters/PublishFilter.java   |   2 +-
 .../cms/core/internal/models/ComponentImpl.java    |   4 +-
 .../sling/cms/core/internal/models/PageImpl.java   |   4 +-
 .../operations/PropertyHintNodeNameGenerator.java  | 158 +++++++-------
 .../rewriter/ReferenceMappingTransformer.java      |   2 +-
 .../internal/servlets/PathSuggestionServlet.java   | 132 ++++++------
 .../sling/cms/core/models/SearchResults.java       |   2 +-
 .../impl/UserGeneratedContentServiceImpl.java      |   2 +-
 docs/admin-tools.md                                |   4 +-
 docs/building.md                                   |   2 +-
 docs/configure-file-editor.md                      |   2 +-
 docs/configure-site.md                             |   6 +-
 docs/content-insights.md                           |   2 +-
 docs/custom-components.md                          |   4 +-
 docs/extending.md                                  |   2 +-
 docs/intro.md                                      |   2 +-
 docs/managing-content.md                           |   4 +-
 docs/reference.md                                  |   2 +-
 metadata-extractor/pom.xml                         |   2 +-
 pom.xml                                            | 191 +++++++++--------
 reference/pom.xml                                  |   4 +-
 .../cms/reference/impl/SearchServiceImpl.java      |   2 +-
 .../sling/cms/reference/models/ItemList.java       | 232 ++++++++++-----------
 .../apache/sling/cms/reference/models/Search.java  |   2 +-
 thumbnailator/pom.xml                              |  94 ---------
 transformer/NOTICE                                 |   8 +
 {api => transformer}/pom.xml                       | 100 +++++++--
 .../cms/transformer}/FileThumbnailTransformer.java |   4 +-
 .../sling/cms/transformer}/OutputFileFormat.java   |   7 +-
 .../sling/cms/transformer}/ThumbnailProvider.java  |   2 +-
 .../cms/transformer}/TransformationHandler.java    |   2 +-
 .../cms/transformer/internal}/CropHandler.java     |   4 +-
 .../internal}/FileThumbnailTransformerImpl.java    |  17 +-
 .../internal}/ImageThumbnailProvider.java          |   4 +-
 .../internal}/PdfThumbnailProvider.java            |   4 +-
 .../cms/transformer/internal}/SizeHandler.java     |   4 +-
 .../internal}/SlideShowThumbnailProvider.java      |  15 +-
 .../internal}/TikaFallbackProvider.java            |   6 +-
 .../transformer/internal}/TransformServlet.java    |   6 +-
 .../helpers/SlingCMSContextHelper.java             |   2 +-
 .../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 +-
 .../src/test/resources/Sling.docx                  | Bin
 {core => transformer}/src/test/resources/Sling.ppt | Bin
 .../src/test/resources/Sling.pptx                  | Bin
 .../src/test/resources}/apache.png                 | Bin
 .../src/test/resources/content.json                |   0
 {core => transformer}/src/test/resources/sling.pdf | Bin
 .../src/test/resources/thumbnail.png               | Bin
 66 files changed, 592 insertions(+), 570 deletions(-)
 create mode 100644 NOTICE
 delete mode 100644 thumbnailator/pom.xml
 create mode 100644 transformer/NOTICE
 copy {api => transformer}/pom.xml (60%)
 rename {api/src/main/java/org/apache/sling/cms/transformation => transformer/src/main/java/org/apache/sling/cms/transformer}/FileThumbnailTransformer.java (95%)
 rename {api/src/main/java/org/apache/sling/cms/transformation => transformer/src/main/java/org/apache/sling/cms/transformer}/OutputFileFormat.java (91%)
 rename {api/src/main/java/org/apache/sling/cms/transformation => transformer/src/main/java/org/apache/sling/cms/transformer}/ThumbnailProvider.java (97%)
 rename {api/src/main/java/org/apache/sling/cms/transformation => transformer/src/main/java/org/apache/sling/cms/transformer}/TransformationHandler.java (97%)
 rename {core/src/main/java/org/apache/sling/cms/core/internal/transformation => transformer/src/main/java/org/apache/sling/cms/transformer/internal}/CropHandler.java (93%)
 rename {core/src/main/java/org/apache/sling/cms/core/internal/transformation => transformer/src/main/java/org/apache/sling/cms/transformer/internal}/FileThumbnailTransformerImpl.java (88%)
 rename {core/src/main/java/org/apache/sling/cms/core/internal/transformation => transformer/src/main/java/org/apache/sling/cms/transformer/internal}/ImageThumbnailProvider.java (92%)
 rename {core/src/main/java/org/apache/sling/cms/core/internal/transformation => transformer/src/main/java/org/apache/sling/cms/transformer/internal}/PdfThumbnailProvider.java (94%)
 rename {core/src/main/java/org/apache/sling/cms/core/internal/transformation => transformer/src/main/java/org/apache/sling/cms/transformer/internal}/SizeHandler.java (93%)
 rename {core/src/main/java/org/apache/sling/cms/core/internal/transformation => transformer/src/main/java/org/apache/sling/cms/transformer/internal}/SlideShowThumbnailProvider.java (86%)
 rename {core/src/main/java/org/apache/sling/cms/core/internal/transformation => transformer/src/main/java/org/apache/sling/cms/transformer/internal}/TikaFallbackProvider.java (94%)
 rename {core/src/main/java/org/apache/sling/cms/core/internal/servlets => transformer/src/main/java/org/apache/sling/cms/transformer/internal}/TransformServlet.java (93%)
 copy {core/src/test/java/org/apache/sling/cms/core => transformer/src/test/java/org/apache/sling/cms/transformer}/helpers/SlingCMSContextHelper.java (97%)
 rename {core/src/test/java/org/apache/sling/cms/core/internal/transformation => transformer/src/test/java/org/apache/sling/cms/transformer/internal}/CropHandlerTest.java (94%)
 rename {core/src/test/java/org/apache/sling/cms/core/internal/transformation => transformer/src/test/java/org/apache/sling/cms/transformer/internal}/FileThumbnailTransformerImplTest.java (80%)
 rename {core/src/test/java/org/apache/sling/cms/core/internal/transformation => transformer/src/test/java/org/apache/sling/cms/transformer/internal}/ImageThumbnailProviderTest.java (93%)
 rename {core/src/test/java/org/apache/sling/cms/core/internal/transformation => transformer/src/test/java/org/apache/sling/cms/transformer/internal}/PdfThumbnailProviderTest.java (92%)
 rename {core/src/test/java/org/apache/sling/cms/core/internal/transformation => transformer/src/test/java/org/apache/sling/cms/transformer/internal}/SizeHandlerTest.java (94%)
 rename {core/src/test/java/org/apache/sling/cms/core/internal/transformation => transformer/src/test/java/org/apache/sling/cms/transformer/internal}/SlideShowThumbnailProviderTest.java (90%)
 rename {core/src/test/java/org/apache/sling/cms/core/internal/transformation => transformer/src/test/java/org/apache/sling/cms/transformer/internal}/TikaFallbackProviderTest.java (90%)
 rename {core/src/test/java/org/apache/sling/cms/core/internal/servlets => transformer/src/test/java/org/apache/sling/cms/transformer/internal}/TransformServletTest.java (82%)
 copy {core => transformer}/src/test/resources/Sling.docx (100%)
 copy {core => transformer}/src/test/resources/Sling.ppt (100%)
 copy {core => transformer}/src/test/resources/Sling.pptx (100%)
 copy {reference/src/main/resources/jcr_root/static/clientlibs/reference/img => transformer/src/test/resources}/apache.png (100%)
 copy {core => transformer}/src/test/resources/content.json (100%)
 copy {core => transformer}/src/test/resources/sling.pdf (100%)
 copy {core => transformer}/src/test/resources/thumbnail.png (100%)


[sling-org-apache-sling-app-cms] 05/08: Adding NOTICE for Metadata Extractor and Thumbnailator

Posted by dk...@apache.org.
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 3b5cfc6d532bc8b650b2e59d0d179d3148d2537c
Author: Dan Klco <dk...@apache.org>
AuthorDate: Tue May 28 10:00:06 2019 -0400

    Adding NOTICE for Metadata Extractor and Thumbnailator
---
 NOTICE                     | 11 +++++++++++
 metadata-extractor/pom.xml |  2 +-
 thumbnailator/pom.xml      |  2 +-
 3 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..3d0b41b
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,11 @@
+Apache Sling App CMS
+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/drewnoakes/metadata-extractor
+
+This product includes software developed at
+https://github.com/coobird/thumbnailator
\ No newline at end of file
diff --git a/metadata-extractor/pom.xml b/metadata-extractor/pom.xml
index 59327d5..7af3f21 100644
--- a/metadata-extractor/pom.xml
+++ b/metadata-extractor/pom.xml
@@ -15,7 +15,7 @@
     </parent>
     <artifactId>org.apache.sling.cms.metadata-extractor</artifactId>
     <packaging>bundle</packaging>
-    <name>Apache Sling - Metadata Extractor</name>
+    <name>Apache Sling - Metadata Extractor Bundle Wrapper</name>
     <description>OSGi Bundle Wrapper for https://github.com/drewnoakes/metadata-extractor</description>
 
     <properties>
diff --git a/thumbnailator/pom.xml b/thumbnailator/pom.xml
index a1d8b2e..731a5a2 100644
--- a/thumbnailator/pom.xml
+++ b/thumbnailator/pom.xml
@@ -15,7 +15,7 @@
     </parent>
     <artifactId>org.apache.sling.cms.thumbnailator</artifactId>
     <packaging>bundle</packaging>
-    <name>Apache Sling - Thumbnailator Wrapper</name>
+    <name>Apache Sling - Thumbnailator Bundle Wrapper</name>
     <description>OSGi Bundle Wrapper for https://github.com/coobird/thumbnailator</description>
 
     <properties>


[sling-org-apache-sling-app-cms] 06/08: Updating builder dependencies

Posted by dk...@apache.org.
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 a431d97f3a44cbb41cc7ff07f284d77465cb2f01
Author: Dan Klco <dk...@apache.org>
AuthorDate: Tue May 28 10:07:13 2019 -0400

    Updating builder dependencies
---
 builder/src/main/provisioning/oak.txt      | 2 +-
 builder/src/main/provisioning/repoinit.txt | 4 ++--
 builder/src/main/provisioning/sling.txt    | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/builder/src/main/provisioning/oak.txt b/builder/src/main/provisioning/oak.txt
index 4621efc..2eb8ad8 100644
--- a/builder/src/main/provisioning/oak.txt
+++ b/builder/src/main/provisioning/oak.txt
@@ -53,7 +53,7 @@
 # start the Oak server instance after all components have been configured
 # and started to avoid restarting that component ( see SLING-4556 )
 [artifacts startLevel=16]
-    org.apache.sling/org.apache.sling.jcr.oak.server/1.2.0
+    org.apache.sling/org.apache.sling.jcr.oak.server/1.2.2
 
 [configurations]
   org.apache.felix.jaas.Configuration.factory-GuestLoginModule
diff --git a/builder/src/main/provisioning/repoinit.txt b/builder/src/main/provisioning/repoinit.txt
index 61aaa84..7250cd1 100644
--- a/builder/src/main/provisioning/repoinit.txt
+++ b/builder/src/main/provisioning/repoinit.txt
@@ -19,8 +19,8 @@
 [feature name=repoinit]
 
 [artifacts]
-  org.apache.sling/org.apache.sling.repoinit.parser/1.2.3-SNAPSHOT
-  org.apache.sling/org.apache.sling.jcr.repoinit/1.1.9-SNAPSHOT
+  org.apache.sling/org.apache.sling.repoinit.parser/1.2.4
+  org.apache.sling/org.apache.sling.jcr.repoinit/1.1.10
   org.apache.sling/org.apache.sling.provisioning.model/1.8.4
 
 [:repoinit]
diff --git a/builder/src/main/provisioning/sling.txt b/builder/src/main/provisioning/sling.txt
index 087c498..1a8f312 100644
--- a/builder/src/main/provisioning/sling.txt
+++ b/builder/src/main/provisioning/sling.txt
@@ -29,7 +29,6 @@
     commons-lang/commons-lang/2.6
     org.apache.commons/commons-lang3/3.8.1
     org.apache.commons/commons-math/2.2
-    org.apache.geronimo.bundles/commons-httpclient/3.1_2
     org.apache.httpcomponents/httpcore-osgi/4.4.10
     org.apache.httpcomponents/httpclient-osgi/4.5.6
     org.apache.sling/org.apache.sling.adapter/2.1.10
@@ -95,6 +94,7 @@
     org.apache.pdfbox/fontbox/2.0.12
     org.apache.pdfbox/jempbox/1.8.16
     org.apache.tika/tika-core/1.19.1
+    org.apache.tika/tika-parsers/1.19.1
 
 [artifacts startLevel=15]
     org.apache.sling/org.apache.sling.jcr.jcr-wrapper/2.0.0


[sling-org-apache-sling-app-cms] 04/08: Updating to the latest release of Commons HTML

Posted by dk...@apache.org.
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 c2ac4e9929221d15d021ceea446da8c7b3766640
Author: Dan Klco <dk...@apache.org>
AuthorDate: Tue May 28 09:55:13 2019 -0400

    Updating to the latest release of Commons HTML
---
 builder/src/main/provisioning/sling-rewriter.txt | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/builder/src/main/provisioning/sling-rewriter.txt b/builder/src/main/provisioning/sling-rewriter.txt
index 7e2bd69..65ebf3d 100644
--- a/builder/src/main/provisioning/sling-rewriter.txt
+++ b/builder/src/main/provisioning/sling-rewriter.txt
@@ -20,13 +20,12 @@
 [feature name=sling-rewriter]
 
 [artifacts]
-    org.apache.sling/org.apache.sling.commons.html/1.0.0
+    org.apache.sling/org.apache.sling.commons.html/1.1.0
     org.apache.sling/org.apache.sling.rewriter/1.2.2
 
 [:repoinit]
     create service user sling-rewriter
 
-
     set ACL for sling-rewriter
         allow   jcr:read    on /
     end


[sling-org-apache-sling-app-cms] 03/08: More Commons Lang 3 Cleanup

Posted by dk...@apache.org.
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 553b3abeebcf7ca15935643ac6aaee472f6d8a1e
Author: Dan Klco <dk...@apache.org>
AuthorDate: Tue May 28 09:53:47 2019 -0400

    More Commons Lang 3 Cleanup
---
 reference/pom.xml                                  |   4 +-
 .../cms/reference/impl/SearchServiceImpl.java      |   2 +-
 .../sling/cms/reference/models/ItemList.java       | 232 ++++++++++-----------
 .../apache/sling/cms/reference/models/Search.java  |   2 +-
 4 files changed, 120 insertions(+), 120 deletions(-)

diff --git a/reference/pom.xml b/reference/pom.xml
index eb08d45..9bcecb2 100644
--- a/reference/pom.xml
+++ b/reference/pom.xml
@@ -107,8 +107,8 @@
             <artifactId>org.apache.sling.models.api</artifactId>
         </dependency>
         <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.jackrabbit</groupId>
diff --git a/reference/src/main/java/org/apache/sling/cms/reference/impl/SearchServiceImpl.java b/reference/src/main/java/org/apache/sling/cms/reference/impl/SearchServiceImpl.java
index f26922d..805a87f 100644
--- a/reference/src/main/java/org/apache/sling/cms/reference/impl/SearchServiceImpl.java
+++ b/reference/src/main/java/org/apache/sling/cms/reference/impl/SearchServiceImpl.java
@@ -18,7 +18,7 @@ package org.apache.sling.cms.reference.impl;
 
 import java.util.Collections;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.ResourceResolver;
diff --git a/reference/src/main/java/org/apache/sling/cms/reference/models/ItemList.java b/reference/src/main/java/org/apache/sling/cms/reference/models/ItemList.java
index 1bdacb5..68ee278 100644
--- a/reference/src/main/java/org/apache/sling/cms/reference/models/ItemList.java
+++ b/reference/src/main/java/org/apache/sling/cms/reference/models/ItemList.java
@@ -23,7 +23,7 @@ import java.util.*;
 import javax.annotation.PostConstruct;
 import javax.jcr.query.Query;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.models.annotations.Model;
@@ -38,126 +38,126 @@ import org.slf4j.LoggerFactory;
 @Model(adaptables = SlingHttpServletRequest.class)
 public class ItemList {
 
-	private static final Logger log = LoggerFactory.getLogger(List.class);
+    private static final Logger log = LoggerFactory.getLogger(List.class);
 
-	private int count;
+    private int count;
 
-	private int end;
+    private int end;
 
-	@RequestAttribute
-	private String limit;
+    @RequestAttribute
+    private String limit;
 
-	private int page;
-
-	private Integer[] pages;
+    private int page;
+
+    private Integer[] pages;
 
-	@RequestAttribute
-	private String query;
+    @RequestAttribute
+    private String query;
 
-	private SlingHttpServletRequest request;
+    private SlingHttpServletRequest request;
 
-	private List<Resource> items = new ArrayList<>();
-
-	private int start;
-
-	public ItemList(SlingHttpServletRequest request) {
-		this.request = request;
-	}
-
-	public int getCount() {
-		return count;
-	}
-
-	public int getCurrentPage() {
-		return page + 1;
-	}
-
-	public int getEnd() {
-		return end;
-	}
-
-	public Integer[] getPages() {
-		return pages;
-	}
-
-	public String getQuery() {
-		return query;
-	}
-
-	public List<Resource> getItems() {
-		return items;
-	}
-
-	public int getStart() {
-		return start;
-	}
-
-	@PostConstruct
-	public void init() {
-
-		log.trace("init");
-
-		Set<String> distinct = new HashSet<>();
-
-		if (request.getRequestPathInfo().getSuffix() != null) {
-			query = query.replace("{SUFFIX}", request.getRequestPathInfo().getSuffix());
-		}
-		log.debug("Listing results of: {}", query);
-
-		Iterator<Resource> res = request.getResourceResolver().findResources(query, Query.JCR_SQL2);
-		while (res.hasNext()) {
-			Resource result = res.next();
-			if (!distinct.contains(result.getPath())) {
-				items.add(result);
-				distinct.add(result.getPath());
-			}
-		}
-		count = items.size();
-		log.debug("Found {} results", count);
-
-		if (StringUtils.isNotBlank(request.getParameter("page")) && request.getParameter("page").matches("\\d+")) {
-			page = Integer.parseInt(request.getParameter("page"), 10) - 1;
-			log.debug("Using page {}", page);
-		} else {
-			page = 0;
-			log.debug("Page {} not specified or not valid", request.getParameter("page"));
-		}
-
-		int l = Integer.parseInt(this.limit, 10);
-		if (page * l >= count) {
-			start = count;
-		} else {
-			start = page * l;
-		}
-		log.debug("Using start {}", start);
-
-		if ((page * l) + l >= count) {
-			end = count;
-		} else {
-			end = (page * l) + l;
-		}
-		log.debug("Using end {}", end);
-		items = items.subList(start, end);
-
-		List<Integer> pgs = new ArrayList<>();
-		int max = ((int) Math.ceil((double) count / l)) + 1;
-		for (int i = 1; i < max; i++) {
-			pgs.add(i);
-		}
-		pages = pgs.toArray(new Integer[pgs.size()]);
-		if (log.isDebugEnabled()) {
-			log.debug("Loaded pages {}", Arrays.toString(pages));
-		}
-	}
-
-	public boolean isFirst() {
-		return page == 0;
-	}
-
-	public boolean isLast() {
-		if (pages.length > 0) {
-			return page + 1 == pages[pages.length - 1];
-		}
-		return true;
-	}
+    private List<Resource> items = new ArrayList<>();
+
+    private int start;
+
+    public ItemList(SlingHttpServletRequest request) {
+        this.request = request;
+    }
+
+    public int getCount() {
+        return count;
+    }
+
+    public int getCurrentPage() {
+        return page + 1;
+    }
+
+    public int getEnd() {
+        return end;
+    }
+
+    public Integer[] getPages() {
+        return pages;
+    }
+
+    public String getQuery() {
+        return query;
+    }
+
+    public List<Resource> getItems() {
+        return items;
+    }
+
+    public int getStart() {
+        return start;
+    }
+
+    @PostConstruct
+    public void init() {
+
+        log.trace("init");
+
+        Set<String> distinct = new HashSet<>();
+
+        if (request.getRequestPathInfo().getSuffix() != null) {
+            query = query.replace("{SUFFIX}", request.getRequestPathInfo().getSuffix());
+        }
+        log.debug("Listing results of: {}", query);
+
+        Iterator<Resource> res = request.getResourceResolver().findResources(query, Query.JCR_SQL2);
+        while (res.hasNext()) {
+            Resource result = res.next();
+            if (!distinct.contains(result.getPath())) {
+                items.add(result);
+                distinct.add(result.getPath());
+            }
+        }
+        count = items.size();
+        log.debug("Found {} results", count);
+
+        if (StringUtils.isNotBlank(request.getParameter("page")) && request.getParameter("page").matches("\\d+")) {
+            page = Integer.parseInt(request.getParameter("page"), 10) - 1;
+            log.debug("Using page {}", page);
+        } else {
+            page = 0;
+            log.debug("Page {} not specified or not valid", request.getParameter("page"));
+        }
+
+        int l = Integer.parseInt(this.limit, 10);
+        if (page * l >= count) {
+            start = count;
+        } else {
+            start = page * l;
+        }
+        log.debug("Using start {}", start);
+
+        if ((page * l) + l >= count) {
+            end = count;
+        } else {
+            end = (page * l) + l;
+        }
+        log.debug("Using end {}", end);
+        items = items.subList(start, end);
+
+        List<Integer> pgs = new ArrayList<>();
+        int max = ((int) Math.ceil((double) count / l)) + 1;
+        for (int i = 1; i < max; i++) {
+            pgs.add(i);
+        }
+        pages = pgs.toArray(new Integer[pgs.size()]);
+        if (log.isDebugEnabled()) {
+            log.debug("Loaded pages {}", Arrays.toString(pages));
+        }
+    }
+
+    public boolean isFirst() {
+        return page == 0;
+    }
+
+    public boolean isLast() {
+        if (pages.length > 0) {
+            return page + 1 == pages[pages.length - 1];
+        }
+        return true;
+    }
 }
diff --git a/reference/src/main/java/org/apache/sling/cms/reference/models/Search.java b/reference/src/main/java/org/apache/sling/cms/reference/models/Search.java
index 7a7acc5..dc38a62 100644
--- a/reference/src/main/java/org/apache/sling/cms/reference/models/Search.java
+++ b/reference/src/main/java/org/apache/sling/cms/reference/models/Search.java
@@ -26,7 +26,7 @@ import java.util.Set;
 import javax.annotation.PostConstruct;
 import javax.jcr.query.Query;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.jackrabbit.util.Text;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;


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

Posted by dk...@apache.org.
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


[sling-org-apache-sling-app-cms] 08/08: Fixing spelling mistakes

Posted by dk...@apache.org.
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 8edd3873fa0a15af5a1ab2d8d7f693f2d6ed74fe
Author: Dan Klco <dk...@apache.org>
AuthorDate: Tue May 28 12:29:36 2019 -0400

    Fixing spelling mistakes
---
 docs/admin-tools.md           | 4 ++--
 docs/building.md              | 2 +-
 docs/configure-file-editor.md | 2 +-
 docs/configure-site.md        | 6 +++---
 docs/content-insights.md      | 2 +-
 docs/custom-components.md     | 4 ++--
 docs/extending.md             | 2 +-
 docs/intro.md                 | 2 +-
 docs/managing-content.md      | 4 ++--
 docs/reference.md             | 2 +-
 10 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/docs/admin-tools.md b/docs/admin-tools.md
index fdf6c11..24ffa8d 100644
--- a/docs/admin-tools.md
+++ b/docs/admin-tools.md
@@ -54,10 +54,10 @@ This tool is accessible from *Tools > Node Browser* or at [http://localhost:8080
 
 ![OSGi Console](img/osgi-console.png)
 
-This console is accessbile from *Tools > System Console* or at [http://localhost:8080/system/console](http://localhost:8080/system/console). The OSGi Console contains several administrative tools allowing administrators to install and manage bundles, configure logging, configure services and many other tasks.
+This console is accessible from *Tools > System Console* or at [http://localhost:8080/system/console](http://localhost:8080/system/console). The OSGi Console contains several administrative tools allowing administrators to install and manage bundles, configure logging, configure services and many other tasks.
 
 # Users & Groups
 
 ![users and Groups](img/users-groups.png)
 
-This tool is accessbile from *Tools > Users & Groups* or at [http://localhost:8080/bin/users.html](http://localhost:8080/bin/users.html). It allows administrators to create and manage users and groups within Sling CMS. Permissions are managed in the Node Browser
\ No newline at end of file
+This tool is accessible from *Tools > Users & Groups* or at [http://localhost:8080/bin/users.html](http://localhost:8080/bin/users.html). It allows administrators to create and manage users and groups within Sling CMS. Permissions are managed in the Node Browser
\ No newline at end of file
diff --git a/docs/building.md b/docs/building.md
index 8cd6d65..947e1df 100644
--- a/docs/building.md
+++ b/docs/building.md
@@ -12,7 +12,7 @@
 
 # Building Sling CMS
 
-To nuild an instance with of the Sling CMS, you'll need Apache Maven 3.0+ and Git.
+To build an instance with of the Sling CMS, you'll need Apache Maven 3.0+ and Git.
 
 First clone the code:
 
diff --git a/docs/configure-file-editor.md b/docs/configure-file-editor.md
index f799ec7..8a27612 100644
--- a/docs/configure-file-editor.md
+++ b/docs/configure-file-editor.md
@@ -16,7 +16,7 @@ The file editor allows users to specify properties on all `sling:File` resources
 
 You can create different file editor configurations for different file types and different types. To add a configuration:
 
- 1. Open the site configuration and create / open the subfolders *files/editors*
+ 1. Open the site configuration and create / open the sub-folders *files/editors*
  2. Click *+ Config* to create a new config and set the type to *Sling CMS - File Editor* 
     ![Add Config](img/add-config.png)
  3. Click on the configuration to edit it and optionally set the applicable MimeType. If no mime type is set, the configuration will be considered as a default.
diff --git a/docs/configure-site.md b/docs/configure-site.md
index 5e22e1b..fddfc95 100644
--- a/docs/configure-site.md
+++ b/docs/configure-site.md
@@ -22,7 +22,7 @@ To create a Site Group, expand *Sites* in the left navigation and select *+Site
 
 The title can be anything you wish, though terse but informative is best. You can either specify a name or one will be generated from the title. 
 
-Generally speaking, you should specify a configuration. This configuration will determine what templates and components will be available in the site as well as other configurations. If creating nexted Site Groups, this may not be necessary as they will be inherited.
+Generally speaking, you should specify a configuration. This configuration will determine what templates and components will be available in the site as well as other configurations. If creating nested Site Groups, this may not be necessary as they will be inherited.
 
 ## Creating a Site
 
@@ -42,7 +42,7 @@ Finally, you can specify a config, but by default, the site will inherit from th
 
 Sling CMS uses Context Aware configuration to configure the sites. By default, you can use the configuration at */conf/global*, but you will probably want to create a custom configuration for real-world uses.
 
-To create a configuration, open the *Configuration* left nav and select *+Configuration*. This will open a new modal window to create the new configuration. Specify a title, set the name to "site", then select the type *Sling CMS - Site Configuration* from the dropdown.
+To create a configuration, open the *Configuration* left navigation and select *+Configuration*. This will open a new modal window to create the new configuration. Specify a title, set the name to "site", then select the type *Sling CMS - Site Configuration* from the dropdown.
 
 ![Site Configuration](img/create-site-configuration.png)
 
@@ -70,7 +70,7 @@ Templates are used to define the structure, allowed components, allowed location
 
 To support a simple site with a single domain, you would create a mapping as such:
 
- - Create a folder with the protocal supported for the domain (e.g. https)
+ - Create a folder with the protocol supported for the domain (e.g. https)
  - Create a Mapping with the domain name and port number for the request, (e.g. www.site.com.443)
  - Set the internal redirect to the path of the site in Sling CMS
  
diff --git a/docs/content-insights.md b/docs/content-insights.md
index 121e26b..aaa3c4d 100644
--- a/docs/content-insights.md
+++ b/docs/content-insights.md
@@ -22,7 +22,7 @@ This insight uses the W3C HTML validator to validate the markup of your page and
 
 ## Page Speed
 
-This insight uses Google Page Speed to analyize the page speed performance of a live page, so it will only work on published pages. 
+This insight uses Google Page Speed to analyze the page speed performance of a live page, so it will only work on published pages. 
 
 ### Configuring the Page Speed Insight
 
diff --git a/docs/custom-components.md b/docs/custom-components.md
index be45663..ec0e778 100644
--- a/docs/custom-components.md
+++ b/docs/custom-components.md
@@ -39,7 +39,7 @@ A component can belong to one or more groups. If a component belongs to no group
 
 ## Editor
 
-The editor is defined by the edit subnode and is required for a component to be addable to a container.
+The editor is defined by the edit sub-node and is required for a component to be addable to a container.
 
 This node structure will be used to define the form for editing an instance of the component. This node should have the resource type `sling-cms/components/editor/slingform` and should have a button attribute.
 
@@ -47,7 +47,7 @@ See the [editor field types](editor-field-types.md) for a list of the default fi
 
 ## Config
 
-The config is defined by the config subnode and is not required. 
+The config is defined by the config sub-node and is not required. 
 
 This node structure will be used to define the form for editing a shared configuration for that component for every page instance using the same template. This node should have the resource type `sling-cms/components/editor/slingform` and should have a button attribute.
 
diff --git a/docs/extending.md b/docs/extending.md
index 74de112..2e3be1e 100644
--- a/docs/extending.md
+++ b/docs/extending.md
@@ -16,7 +16,7 @@ Developers can  extend or even override any portion of the Sling CMS application
 
 Depending on what you need to extend or override, there are two different options. If you want to override the content in Sling CMS, you can use [Sling Resource Merger](https://sling.apache.org/documentation/bundles/resource-merger.html) to customize any of the content in Sling CMS. If you need to overlay one of the scripts, you can overlay the scripts using the Sling script overlays.
 
-## Determing the Correct Approach
+## Determining the Correct Approach
 
 To determine the correct approach, first determine what you are looking to overlay. Sling CMS uses Sling Mappings to map the short path */cms* to the Sling repository path */libs/sling-cms/content*, so can use this same pattern to determine the path of the content serving a CMS page, For example the resource serving */cms/start.html* would be found at */libs/sling-cms/content/start*.
 
diff --git a/docs/intro.md b/docs/intro.md
index d1b072c..9b1bac0 100644
--- a/docs/intro.md
+++ b/docs/intro.md
@@ -12,7 +12,7 @@
 
 # Project Intro
 
-This page will give you an introduction of the structure of the Sling CMS project and some idea of how all of this comes together. If you aren't planning on extending or contributing to Sling CMS, this probably isn't necessary fot you.
+This page will give you an introduction of the structure of the Sling CMS project and some idea of how all of this comes together. If you aren't planning on extending or contributing to Sling CMS, this probably isn't necessary for you.
 
 ## Project Structure
 
diff --git a/docs/managing-content.md b/docs/managing-content.md
index ef701a9..56e1568 100644
--- a/docs/managing-content.md
+++ b/docs/managing-content.md
@@ -18,7 +18,7 @@ Consoles in Sling CMS generally follow the same pattern:
 
  1. The left navigation allows for switching between components of Sling CMS
  2. The create bar contains buttons to create new content
- 3. The breakcrumb shows context within the content structure
+ 3. The breadcrumb shows context within the content structure
  4. Filter for filtering content
  5. Table of content, clicking on the name of the item will open that item
  6. The action buttons on an individual piece of content
@@ -31,7 +31,7 @@ The first type of content is Site content. Every site belongs to a Site Group, t
 
 From there you can see the sites and child Site Groups that belong to the site group. Select the name of the Site or Site Group to open the Site / Site Group.
 
-Sites can contain Pages, Files and Folders. Static content is soley static and only contains Files and Folders. 
+Sites can contain Pages, Files and Folders. Static content is solely static and only contains Files and Folders. 
 
 ![Site Content](img/site-content.png)
 
diff --git a/docs/reference.md b/docs/reference.md
index c16ed9a..92829eb 100644
--- a/docs/reference.md
+++ b/docs/reference.md
@@ -33,5 +33,5 @@ These components are:
  
 In addition to these reference components, there are two general use components in the main ui project. These are found at `/libs/sling-cms/components/general` and are:
 
- - container - a container into which other components can be aded. This is the most foundational component in Sling CMS allowing for component-driven content development
+ - container - a container into which other components can be added. This is the most foundational component in Sling CMS allowing for component-driven content development
  - rte - a HTML based rich text editor using [wysihtml](http://wysihtml.com/) as the RTE
\ No newline at end of file


[sling-org-apache-sling-app-cms] 02/08: Organized dependencies and updating to Commons Lang 3

Posted by dk...@apache.org.
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 10a39a4db19e69df101a5d8fb6a8033dd5ac2e6c
Author: Dan Klco <dk...@apache.org>
AuthorDate: Tue May 28 09:44:29 2019 -0400

    Organized dependencies and updating to Commons Lang 3
---
 api/pom.xml                                        |   4 +-
 .../main/java/org/apache/sling/cms/CMSUtils.java   |   2 +-
 .../main/java/org/apache/sling/cms/Reference.java  |   2 +-
 .../sling/cms/transformation/OutputFileFormat.java |   5 +-
 core/pom.xml                                       |   8 +-
 .../core/internal/filters/CMSSecurityFilter.java   |   4 +-
 .../core/internal/filters/EditIncludeFilter.java   |   2 +-
 .../cms/core/internal/filters/PublishFilter.java   |   2 +-
 .../cms/core/internal/models/ComponentImpl.java    |   4 +-
 .../sling/cms/core/internal/models/PageImpl.java   |   4 +-
 .../operations/PropertyHintNodeNameGenerator.java  | 158 ++++++++---------
 .../rewriter/ReferenceMappingTransformer.java      |   2 +-
 .../internal/servlets/PathSuggestionServlet.java   | 132 +++++++-------
 .../FileThumbnailTransformerImpl.java              |   7 +-
 .../sling/cms/core/models/SearchResults.java       |   2 +-
 .../impl/UserGeneratedContentServiceImpl.java      |   2 +-
 pom.xml                                            | 189 ++++++++++++---------
 17 files changed, 278 insertions(+), 251 deletions(-)

diff --git a/api/pom.xml b/api/pom.xml
index 3134e6a..764ff3b 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -89,8 +89,8 @@
             <artifactId>org.apache.sling.jcr.resource</artifactId>
         </dependency>
         <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.jackrabbit</groupId>
diff --git a/api/src/main/java/org/apache/sling/cms/CMSUtils.java b/api/src/main/java/org/apache/sling/cms/CMSUtils.java
index 5a3f18b..ce3de9d 100644
--- a/api/src/main/java/org/apache/sling/cms/CMSUtils.java
+++ b/api/src/main/java/org/apache/sling/cms/CMSUtils.java
@@ -21,7 +21,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 
-import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.sling.api.resource.Resource;
 import org.jetbrains.annotations.NotNull;
diff --git a/api/src/main/java/org/apache/sling/cms/Reference.java b/api/src/main/java/org/apache/sling/cms/Reference.java
index 927543a..7b6d0d4 100644
--- a/api/src/main/java/org/apache/sling/cms/Reference.java
+++ b/api/src/main/java/org/apache/sling/cms/Reference.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sling.cms;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.api.resource.Resource;
 
 public class Reference {
diff --git a/api/src/main/java/org/apache/sling/cms/transformation/OutputFileFormat.java b/api/src/main/java/org/apache/sling/cms/transformation/OutputFileFormat.java
index 2f158cb..a0b6258 100644
--- a/api/src/main/java/org/apache/sling/cms/transformation/OutputFileFormat.java
+++ b/api/src/main/java/org/apache/sling/cms/transformation/OutputFileFormat.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sling.cms.transformation;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.api.SlingHttpServletRequest;
 
 import com.google.common.base.Enums;
@@ -35,7 +35,8 @@ public enum OutputFileFormat {
      * @return the format for the suffix
      */
     public static OutputFileFormat forRequest(SlingHttpServletRequest request) {
-        String suffixExtension = StringUtils.substringAfterLast(request.getRequestPathInfo().getSuffix(), ".").toUpperCase();
+        String suffixExtension = StringUtils.substringAfterLast(request.getRequestPathInfo().getSuffix(), ".")
+                .toUpperCase();
         return Enums.getIfPresent(OutputFileFormat.class, suffixExtension).or(OutputFileFormat.JPEG);
     }
 
diff --git a/core/pom.xml b/core/pom.xml
index 2836a80..7627605 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -155,8 +155,8 @@
             <artifactId>org.apache.sling.jcr.resource</artifactId>
         </dependency>
         <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
         </dependency>
         <dependency>
             <groupId>commons-io</groupId>
@@ -265,5 +265,9 @@
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.testing.sling-mock.junit4</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.commons.classloader</artifactId>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/filters/CMSSecurityFilter.java b/core/src/main/java/org/apache/sling/cms/core/internal/filters/CMSSecurityFilter.java
index ec20f35..45440c8 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/filters/CMSSecurityFilter.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/filters/CMSSecurityFilter.java
@@ -32,8 +32,8 @@ import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.commons.lang.ArrayUtils;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.User;
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/filters/EditIncludeFilter.java b/core/src/main/java/org/apache/sling/cms/core/internal/filters/EditIncludeFilter.java
index b5fd996..b6c4256 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/filters/EditIncludeFilter.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/filters/EditIncludeFilter.java
@@ -27,7 +27,7 @@ import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/filters/PublishFilter.java b/core/src/main/java/org/apache/sling/cms/core/internal/filters/PublishFilter.java
index 926918b..8e20b28 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/filters/PublishFilter.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/filters/PublishFilter.java
@@ -26,7 +26,7 @@ import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.cms.CMSConstants;
 import org.apache.sling.cms.CMSUtils;
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/models/ComponentImpl.java b/core/src/main/java/org/apache/sling/cms/core/internal/models/ComponentImpl.java
index 774cbb1..9a76cab 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/models/ComponentImpl.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/models/ComponentImpl.java
@@ -19,8 +19,8 @@ package org.apache.sling.cms.core.internal.models;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import org.apache.commons.lang.ArrayUtils;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.cms.Component;
 import org.apache.sling.models.annotations.Default;
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/models/PageImpl.java b/core/src/main/java/org/apache/sling/cms/core/internal/models/PageImpl.java
index 25073a6..55e657c 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/models/PageImpl.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/models/PageImpl.java
@@ -23,7 +23,7 @@ import java.util.List;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ValueMap;
@@ -192,7 +192,7 @@ public class PageImpl implements Page {
     }
 
     @Override
-    public Site getSite() { 
+    public Site getSite() {
         SiteManager siteMgr = resource.adaptTo(SiteManager.class);
         Site site = null;
         if (siteMgr != null) {
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/operations/PropertyHintNodeNameGenerator.java b/core/src/main/java/org/apache/sling/cms/core/internal/operations/PropertyHintNodeNameGenerator.java
index 5eefd91..02c8a35 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/operations/PropertyHintNodeNameGenerator.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/operations/PropertyHintNodeNameGenerator.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sling.cms.core.internal.operations;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.request.RequestParameter;
 import org.apache.sling.api.request.RequestParameterMap;
@@ -37,83 +37,83 @@ import org.osgi.service.metatype.annotations.ObjectClassDefinition;
 @Designate(ocd = Config.class)
 public class PropertyHintNodeNameGenerator implements NodeNameGenerator {
 
-	@ObjectClassDefinition(name = "%cms.name.generator.name", description = "%cms.name.generator.description", localization = "OSGI-INF/l10n/bundle")
-
-	public @interface Config {
-
-		@AttributeDefinition(name = "%allowed.chars.name", description = "%allowed.chars.description")
-		String allowed_chars() default "abcdefghijklmnopqrstuvwxyz0123456789_-";
-
-		@AttributeDefinition(name = "%replacement.char.name", description = "%replacement.char.description")
-		String replacement_char() default "-";
-	}
-
-	/**
-	 * Optional request parameter specifying a parameter name to use for the name of
-	 * the newly created node (value is ":nameParam").
-	 */
-	public static final String RP_NODE_NAME_PARAM = ":nameParam";
-
-	private String allowedChars;
-
-	private char replacementChar;
-
-	@Activate
-	@Modified
-	public void activate(Config config) {
-		this.allowedChars = config.allowed_chars();
-		this.replacementChar = config.replacement_char().toCharArray()[0];
-	}
-
-	public String filter(String nodeName) {
-		final StringBuilder sb = new StringBuilder();
-		char lastAdded = 0;
-
-		nodeName = nodeName.toLowerCase();
-		for (int i = 0; i < nodeName.length(); i++) {
-			final char c = nodeName.charAt(i);
-			char toAdd = c;
-
-			if (allowedChars.indexOf(c) < 0) {
-				if (lastAdded == replacementChar) {
-					// do not add several _ in a row
-					continue;
-				}
-				toAdd = replacementChar;
-
-			} else if (i == 0 && Character.isDigit(c)) {
-				sb.append(replacementChar);
-			}
-
-			sb.append(toAdd);
-			lastAdded = toAdd;
-		}
-
-		if (sb.length() == 0) {
-			sb.append(replacementChar);
-		}
-
-		return sb.toString();
-	}
-
-	@Override
-	public String getNodeName(SlingHttpServletRequest request, String parentPath, boolean requirePrefix,
-			NodeNameGenerator defaultNodeNameGenerator) {
-		RequestParameterMap parameters = request.getRequestParameterMap();
-		String name = null;
-
-		// If the :nameParam parameter is specified use that parameter to generate the
-		// name
-		RequestParameter nameParam = null;
-		RequestParameter paramName = parameters.getValue(RP_NODE_NAME_PARAM);
-		if (paramName != null && StringUtils.isNotBlank(paramName.getString())) {
-			nameParam = parameters.getValue(paramName.getString());
-		}
-		if (nameParam != null && StringUtils.isNotBlank(nameParam.getString())) {
-			name = filter(nameParam.getString());
-		}
-
-		return name;
-	}
+    @ObjectClassDefinition(name = "%cms.name.generator.name", description = "%cms.name.generator.description", localization = "OSGI-INF/l10n/bundle")
+
+    public @interface Config {
+
+        @AttributeDefinition(name = "%allowed.chars.name", description = "%allowed.chars.description")
+        String allowed_chars() default "abcdefghijklmnopqrstuvwxyz0123456789_-";
+
+        @AttributeDefinition(name = "%replacement.char.name", description = "%replacement.char.description")
+        String replacement_char() default "-";
+    }
+
+    /**
+     * Optional request parameter specifying a parameter name to use for the name of
+     * the newly created node (value is ":nameParam").
+     */
+    public static final String RP_NODE_NAME_PARAM = ":nameParam";
+
+    private String allowedChars;
+
+    private char replacementChar;
+
+    @Activate
+    @Modified
+    public void activate(Config config) {
+        this.allowedChars = config.allowed_chars();
+        this.replacementChar = config.replacement_char().toCharArray()[0];
+    }
+
+    public String filter(String nodeName) {
+        final StringBuilder sb = new StringBuilder();
+        char lastAdded = 0;
+
+        nodeName = nodeName.toLowerCase();
+        for (int i = 0; i < nodeName.length(); i++) {
+            final char c = nodeName.charAt(i);
+            char toAdd = c;
+
+            if (allowedChars.indexOf(c) < 0) {
+                if (lastAdded == replacementChar) {
+                    // do not add several _ in a row
+                    continue;
+                }
+                toAdd = replacementChar;
+
+            } else if (i == 0 && Character.isDigit(c)) {
+                sb.append(replacementChar);
+            }
+
+            sb.append(toAdd);
+            lastAdded = toAdd;
+        }
+
+        if (sb.length() == 0) {
+            sb.append(replacementChar);
+        }
+
+        return sb.toString();
+    }
+
+    @Override
+    public String getNodeName(SlingHttpServletRequest request, String parentPath, boolean requirePrefix,
+            NodeNameGenerator defaultNodeNameGenerator) {
+        RequestParameterMap parameters = request.getRequestParameterMap();
+        String name = null;
+
+        // If the :nameParam parameter is specified use that parameter to generate the
+        // name
+        RequestParameter nameParam = null;
+        RequestParameter paramName = parameters.getValue(RP_NODE_NAME_PARAM);
+        if (paramName != null && StringUtils.isNotBlank(paramName.getString())) {
+            nameParam = parameters.getValue(paramName.getString());
+        }
+        if (nameParam != null && StringUtils.isNotBlank(nameParam.getString())) {
+            name = filter(nameParam.getString());
+        }
+
+        return name;
+    }
 
 }
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/rewriter/ReferenceMappingTransformer.java b/core/src/main/java/org/apache/sling/cms/core/internal/rewriter/ReferenceMappingTransformer.java
index d55ae99..f2a4eeb 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/rewriter/ReferenceMappingTransformer.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/rewriter/ReferenceMappingTransformer.java
@@ -18,7 +18,7 @@ package org.apache.sling.cms.core.internal.rewriter;
 
 import java.io.IOException;
 
-import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.caconfig.resource.ConfigurationResourceResolver;
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/servlets/PathSuggestionServlet.java b/core/src/main/java/org/apache/sling/cms/core/internal/servlets/PathSuggestionServlet.java
index a2457b3..aa32d19 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/servlets/PathSuggestionServlet.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/servlets/PathSuggestionServlet.java
@@ -27,7 +27,7 @@ import javax.json.JsonArrayBuilder;
 import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.resource.Resource;
@@ -43,82 +43,82 @@ import org.slf4j.LoggerFactory;
  * Servlet which includes the content of the page when the page is accessed.
  */
 @Component(service = { Servlet.class }, property = { "sling.servlet.paths=/bin/cms/paths",
-		"sling.servlet.methods=" + HttpConstants.METHOD_GET })
+        "sling.servlet.methods=" + HttpConstants.METHOD_GET })
 @Designate(ocd = PathSuggestionServletConfig.class)
 public class PathSuggestionServlet extends SlingSafeMethodsServlet {
 
-	private static final long serialVersionUID = -410942682163323725L;
-	private static final Logger log = LoggerFactory.getLogger(PathSuggestionServlet.class);
+    private static final long serialVersionUID = -410942682163323725L;
+    private static final Logger log = LoggerFactory.getLogger(PathSuggestionServlet.class);
 
-	private static final Map<String, String[]> typeFilters = new HashMap<>();
+    private static final Map<String, String[]> typeFilters = new HashMap<>();
 
-	@Activate
-	public void activate(PathSuggestionServletConfig config) {
-		typeFilters.clear();
-		for (String filter : config.typeFilters()) {
-			String[] parts = filter.split("\\=");
-			String key = parts[0];
-			String[] types = parts[1].split("\\,");
-			typeFilters.put(key, types);
-		}
-		log.info("Loaded type filters {}", typeFilters);
-	}
+    @Activate
+    public void activate(PathSuggestionServletConfig config) {
+        typeFilters.clear();
+        for (String filter : config.typeFilters()) {
+            String[] parts = filter.split("\\=");
+            String key = parts[0];
+            String[] types = parts[1].split("\\,");
+            typeFilters.put(key, types);
+        }
+        log.info("Loaded type filters {}", typeFilters);
+    }
 
-	@Override
-	protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response)
-			throws ServletException, IOException {
-		String path = request.getParameter("path");
+    @Override
+    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response)
+            throws ServletException, IOException {
+        String path = request.getParameter("path");
 
-		if (StringUtils.isEmpty(path)) {
-			path = "/";
-		}
-		log.debug("Finding valid paths under {}", path);
+        if (StringUtils.isEmpty(path)) {
+            path = "/";
+        }
+        log.debug("Finding valid paths under {}", path);
 
-		String type = request.getParameter("type");
-		if (!typeFilters.containsKey(type)) {
-			type = "all";
-		}
-		log.debug("Filtering by type: {}", type);
+        String type = request.getParameter("type");
+        if (!typeFilters.containsKey(type)) {
+            type = "all";
+        }
+        log.debug("Filtering by type: {}", type);
 
-		JsonArrayBuilder arrBuilder = Json.createArrayBuilder();
-		Resource parent = request.getResourceResolver().getResource(path);
+        JsonArrayBuilder arrBuilder = Json.createArrayBuilder();
+        Resource parent = request.getResourceResolver().getResource(path);
 
-		if (parent == null) {
-			path = StringUtils.left(path, path.lastIndexOf('/'));
-			if (StringUtils.isEmpty(path)) {
-				path = "/";
-			}
+        if (parent == null) {
+            path = StringUtils.left(path, path.lastIndexOf('/'));
+            if (StringUtils.isEmpty(path)) {
+                path = "/";
+            }
 
-			log.debug("Using stemmed path {}", path);
-			parent = request.getResourceResolver().getResource(path);
-		}
-		if (parent != null) {
-			for (Resource child : parent.getChildren()) {
-				if (isIncluded(child, type)) {
-					arrBuilder.add(child.getPath());
-				}
-			}
-		}
+            log.debug("Using stemmed path {}", path);
+            parent = request.getResourceResolver().getResource(path);
+        }
+        if (parent != null) {
+            for (Resource child : parent.getChildren()) {
+                if (isIncluded(child, type)) {
+                    arrBuilder.add(child.getPath());
+                }
+            }
+        }
 
-		response.setContentType("application/json");
-		response.getWriter().write(arrBuilder.build().toString());
-	}
+        response.setContentType("application/json");
+        response.getWriter().write(arrBuilder.build().toString());
+    }
 
-	private boolean isIncluded(Resource child, String type) {
-		try {
-			Node node = child.adaptTo(Node.class);
-			if (node != null) {
-				for (String t : typeFilters.get(type)) {
-					if (node.isNodeType(t)) {
-						return true;
-					}
-				}
-			} else {
-				log.debug("Unable to adapt child resource {} to node", child.getPath());
-			}
-		} catch (RepositoryException e) {
-			log.warn("Unexpected exception accessing JCR Node", e);
-		}
-		return false;
-	}
+    private boolean isIncluded(Resource child, String type) {
+        try {
+            Node node = child.adaptTo(Node.class);
+            if (node != null) {
+                for (String t : typeFilters.get(type)) {
+                    if (node.isNodeType(t)) {
+                        return true;
+                    }
+                }
+            } else {
+                log.debug("Unable to adapt child resource {} to node", child.getPath());
+            }
+        } catch (RepositoryException e) {
+            log.warn("Unexpected exception accessing JCR Node", e);
+        }
+        return false;
+    }
 }
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/transformation/FileThumbnailTransformerImpl.java b/core/src/main/java/org/apache/sling/cms/core/internal/transformation/FileThumbnailTransformerImpl.java
index 49e750a..ad3c757 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/transformation/FileThumbnailTransformerImpl.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/transformation/FileThumbnailTransformerImpl.java
@@ -22,7 +22,7 @@ import java.io.OutputStream;
 import java.util.List;
 import java.util.Optional;
 
-import org.apache.commons.lang.StringUtils;
+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;
@@ -36,6 +36,8 @@ import org.osgi.service.component.annotations.ReferencePolicyOption;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.Lists;
+
 import net.coobird.thumbnailator.Thumbnails;
 import net.coobird.thumbnailator.Thumbnails.Builder;
 
@@ -72,7 +74,8 @@ public class FileThumbnailTransformerImpl implements FileThumbnailTransformer {
     @Override
     public void transformFile(File file, String[] commands, OutputFileFormat format, OutputStream out)
             throws IOException {
-        ThumbnailProvider provider = thumbnailProviders.stream().filter(tp -> tp.applies(file)).findFirst()
+        ThumbnailProvider provider = Lists.reverse(thumbnailProviders).stream().filter(tp -> tp.applies(file))
+                .findFirst()
                 .orElseThrow(() -> new IOException("Unable to find thumbnail provider for: " + file.getPath()));
         log.debug("Using thumbnail provider {} for file {}", provider, file);
         Builder<? extends InputStream> builder = Thumbnails.of(provider.getThumbnail(file));
diff --git a/core/src/main/java/org/apache/sling/cms/core/models/SearchResults.java b/core/src/main/java/org/apache/sling/cms/core/models/SearchResults.java
index 307686b..0327419 100644
--- a/core/src/main/java/org/apache/sling/cms/core/models/SearchResults.java
+++ b/core/src/main/java/org/apache/sling/cms/core/models/SearchResults.java
@@ -22,7 +22,7 @@ import java.util.Iterator;
 
 import javax.jcr.query.Query;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.jackrabbit.util.Text;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
diff --git a/core/src/main/java/org/apache/sling/cms/core/usergenerated/impl/UserGeneratedContentServiceImpl.java b/core/src/main/java/org/apache/sling/cms/core/usergenerated/impl/UserGeneratedContentServiceImpl.java
index 9d03645..9c4d536 100644
--- a/core/src/main/java/org/apache/sling/cms/core/usergenerated/impl/UserGeneratedContentServiceImpl.java
+++ b/core/src/main/java/org/apache/sling/cms/core/usergenerated/impl/UserGeneratedContentServiceImpl.java
@@ -20,7 +20,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.LoginException;
diff --git a/pom.xml b/pom.xml
index 131a5c7..3f00584 100644
--- a/pom.xml
+++ b/pom.xml
@@ -53,6 +53,34 @@
 
     <dependencyManagement>
         <dependencies>
+
+
+
+            <!-- Other Apache Dependencies -->
+            <dependency>
+                <groupId>org.apache.cocoon</groupId>
+                <artifactId>cocoon-serializers-charsets</artifactId>
+                <version>1.0.2</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-math</artifactId>
+                <version>2.2</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>org.apache.felix.webconsole</artifactId>
+                <version>4.2.0</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.geronimo.bundles</groupId>
+                <artifactId>jstl</artifactId>
+                <version>1.2_1</version>
+                <scope>provided</scope>
+            </dependency>
             <dependency>
                 <groupId>org.apache.geronimo.specs</groupId>
                 <artifactId>geronimo-atinject_1.0_spec</artifactId>
@@ -60,12 +88,32 @@
                 <scope>provided</scope>
             </dependency>
             <dependency>
-                <groupId>javax.servlet</groupId>
-                <artifactId>servlet-api</artifactId>
-                <version>2.5</version>
+                <groupId>org.apache.httpcomponents</groupId>
+                <artifactId>httpclient</artifactId>
+                <version>4.5.5</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.jackrabbit</groupId>
+                <artifactId>jackrabbit-api</artifactId>
+                <version>2.14.4</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.jackrabbit</groupId>
+                <artifactId>jackrabbit-jcr-commons</artifactId>
+                <version>2.7.5</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
+                <groupId>org.apache.jackrabbit</groupId>
+                <artifactId>oak-core</artifactId>
+                <version>1.6.8</version>
+                <scope>provided</scope>
+            </dependency>
+
+            <!-- Sling Dependencies -->
+            <dependency>
                 <groupId>org.apache.sling</groupId>
                 <artifactId>org.apache.sling.api</artifactId>
                 <version>2.18.0</version>
@@ -79,6 +127,12 @@
             </dependency>
             <dependency>
                 <groupId>org.apache.sling</groupId>
+                <artifactId>org.apache.sling.commons.classloader</artifactId>
+                <version>1.4.4</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.sling</groupId>
                 <artifactId>org.apache.sling.commons.johnzon</artifactId>
                 <version>1.0.0</version>
                 <scope>provided</scope>
@@ -103,50 +157,52 @@
             </dependency>
             <dependency>
                 <groupId>org.apache.sling</groupId>
-                <artifactId>org.apache.sling.models.api</artifactId>
-                <version>1.3.6</version>
+                <artifactId>org.apache.sling.i18n</artifactId>
+                <version>2.5.14</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.sling</groupId>
-                <artifactId>org.apache.sling.rewriter</artifactId>
-                <version>1.0.4</version>
+                <artifactId>org.apache.sling.jcr.base</artifactId>
+                <version>2.0.6</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.sling</groupId>
-                <artifactId>org.apache.sling.servlets.post</artifactId>
-                <version>2.3.22</version>
+                <artifactId>org.apache.sling.jcr.resource</artifactId>
+                <version>2.3.8</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.sling</groupId>
-                <artifactId>org.apache.sling.jcr.base</artifactId>
-                <version>2.0.6</version>
+                <artifactId>org.apache.sling.models.api</artifactId>
+                <version>1.3.6</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
-                <groupId>org.apache.jackrabbit</groupId>
-                <artifactId>jackrabbit-jcr-commons</artifactId>
-                <version>2.7.5</version>
+                <groupId>org.apache.sling</groupId>
+                <artifactId>org.apache.sling.rewriter</artifactId>
+                <version>1.0.4</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.sling</groupId>
-                <artifactId>org.apache.sling.jcr.resource</artifactId>
-                <version>2.3.8</version>
+                <artifactId>org.apache.sling.scripting.api</artifactId>
+                <version>2.2.0</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
-                <groupId>org.apache.tika</groupId>
-                <artifactId>tika-core</artifactId>
-                <version>1.19.1</version>
+                <groupId>org.apache.sling</groupId>
+                <artifactId>org.apache.sling.servlets.post</artifactId>
+                <version>2.3.22</version>
                 <scope>provided</scope>
             </dependency>
+
+            <!-- Utilities / Misc -->
             <dependency>
-                <groupId>commons-lang</groupId>
-                <artifactId>commons-lang</artifactId>
-                <version>2.6</version>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-lang3</artifactId>
+                <version>3.4</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
@@ -156,21 +212,15 @@
                 <scope>provided</scope>
             </dependency>
             <dependency>
-                <groupId>org.apache.cocoon</groupId>
-                <artifactId>cocoon-serializers-charsets</artifactId>
-                <version>1.0.2</version>
-                <scope>provided</scope>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.geronimo.bundles</groupId>
-                <artifactId>jstl</artifactId>
-                <version>1.2_1</version>
+                <groupId>com.google.guava</groupId>
+                <artifactId>guava</artifactId>
+                <version>15.0</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
-                <groupId>org.apache.jackrabbit</groupId>
-                <artifactId>jackrabbit-api</artifactId>
-                <version>2.14.4</version>
+                <groupId>javax.servlet</groupId>
+                <artifactId>servlet-api</artifactId>
+                <version>2.5</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
@@ -185,12 +235,8 @@
                 <version>16.0.2</version>
                 <scope>provided</scope>
             </dependency>
-            <dependency>
-                <groupId>org.apache.jackrabbit</groupId>
-                <artifactId>oak-core</artifactId>
-                <version>1.6.8</version>
-                <scope>provided</scope>
-            </dependency>
+
+            <!-- Document Processing Dependencies -->
             <dependency>
                 <artifactId>jsoup</artifactId>
                 <version>1.11.3</version>
@@ -198,33 +244,9 @@
                 <scope>provided</scope>
             </dependency>
             <dependency>
-                <groupId>org.apache.sling</groupId>
-                <artifactId>org.apache.sling.i18n</artifactId>
-                <version>2.5.14</version>
-                <scope>provided</scope>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>org.apache.felix.webconsole</artifactId>
-                <version>4.2.0</version>
-                <scope>provided</scope>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.commons</groupId>
-                <artifactId>commons-math</artifactId>
-                <version>2.2</version>
-                <scope>provided</scope>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.httpcomponents</groupId>
-                <artifactId>httpclient</artifactId>
-                <version>4.5.5</version>
-                <scope>provided</scope>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.sling</groupId>
-                <artifactId>org.apache.sling.scripting.api</artifactId>
-                <version>2.2.0</version>
+                <groupId>net.coobird</groupId>
+                <artifactId>thumbnailator</artifactId>
+                <version>[0.4, 0.5)</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
@@ -234,24 +256,6 @@
                 <scope>provided</scope>
             </dependency>
             <dependency>
-                <groupId>org.mockito</groupId>
-                <artifactId>mockito-core</artifactId>
-                <version>2.27.0</version>
-                <scope>test</scope>
-            </dependency>
-            <dependency>
-                <groupId>com.google.guava</groupId>
-                <artifactId>guava</artifactId>
-                <version>15.0</version>
-                <scope>provided</scope>
-            </dependency>
-            <dependency>
-                <groupId>net.coobird</groupId>
-                <artifactId>thumbnailator</artifactId>
-                <version>[0.4, 0.5)</version>
-                <scope>provided</scope>
-            </dependency>
-            <dependency>
                 <groupId>org.apache.poi</groupId>
                 <artifactId>poi-ooxml</artifactId>
                 <version>4.0.1</version>
@@ -264,11 +268,26 @@
                 <scope>provided</scope>
             </dependency>
             <dependency>
+                <groupId>org.apache.tika</groupId>
+                <artifactId>tika-core</artifactId>
+                <version>1.19.1</version>
+                <scope>provided</scope>
+            </dependency>
+
+            <!-- Testing Dependencies -->
+            <dependency>
                 <groupId>org.apache.sling</groupId>
                 <artifactId>org.apache.sling.testing.sling-mock.junit4</artifactId>
                 <version>2.3.0</version>
                 <scope>test</scope>
             </dependency>
+            <dependency>
+                <groupId>org.mockito</groupId>
+                <artifactId>mockito-core</artifactId>
+                <version>2.27.0</version>
+                <scope>test</scope>
+            </dependency>
+
         </dependencies>
     </dependencyManagement>
 


[sling-org-apache-sling-app-cms] 01/08: Set the context classloader to the Sling Dynamic ClassLoader to fix an issue with generating PPT thumbnails

Posted by dk...@apache.org.
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 0fafcbef71fcb688e42888035f3643e58c648271
Author: Dan Klco <dk...@apache.org>
AuthorDate: Tue May 28 09:44:09 2019 -0400

    Set the context classloader to the Sling Dynamic ClassLoader to fix an
    issue with generating PPT thumbnails
---
 .../core/internal/transformation/SlideShowThumbnailProvider.java | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/transformation/SlideShowThumbnailProvider.java b/core/src/main/java/org/apache/sling/cms/core/internal/transformation/SlideShowThumbnailProvider.java
index 77bffde..6cf64a6 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/transformation/SlideShowThumbnailProvider.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/transformation/SlideShowThumbnailProvider.java
@@ -36,7 +36,9 @@ 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.commons.classloader.DynamicClassLoaderManager;
 import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 
 import com.google.common.net.MediaType;
 
@@ -46,6 +48,9 @@ import com.google.common.net.MediaType;
 @Component(service = ThumbnailProvider.class)
 public class SlideShowThumbnailProvider implements ThumbnailProvider {
 
+    @Reference
+    private DynamicClassLoaderManager dclm;
+
     @Override
     public boolean applies(File file) {
         MediaType mt = MediaType.parse(file.getContentType());
@@ -54,6 +59,10 @@ public class SlideShowThumbnailProvider implements ThumbnailProvider {
 
     @Override
     public InputStream getThumbnail(File file) throws IOException {
+        if (dclm != null) {
+            Thread.currentThread().setContextClassLoader(dclm.getDynamicClassLoader());
+        }
+
         SlideShow<?, ?> ppt = null;
         MediaType mt = MediaType.parse(file.getContentType());
         try (ByteArrayOutputStream baos = new ByteArrayOutputStream();