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 2021/07/02 21:17:29 UTC
[sling-whiteboard] branch master updated: Separating out the API
from SPI and adding a handler for flipping an image horizontally or
vertically
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-whiteboard.git
The following commit(s) were added to refs/heads/master by this push:
new 4b0b4c4 Separating out the API from SPI and adding a handler for flipping an image horizontally or vertically
4b0b4c4 is described below
commit 4b0b4c48f9c2bbf55938c97bb3835d39dfda4ebb
Author: Dan Klco <kl...@adobe.com>
AuthorDate: Fri Jul 2 17:13:59 2021 -0400
Separating out the API from SPI and adding a handler for flipping an image horizontally or vertically
---
org.apache.sling.commons.thumbnail/NOTICE | 2 +-
org.apache.sling.commons.thumbnail/README.md | 10 +++---
.../commons/thumbnails/BadRequestException.java | 5 +++
.../{ => extension}/ThumbnailProvider.java | 2 +-
.../{ => extension}/TransformationHandler.java | 3 +-
.../commons/thumbnails/extension/package-info.java | 26 +++++++++++++++
.../thumbnails/internal/ThumbnailsWebConsole.java | 4 +--
.../thumbnails/internal/TransformerImpl.java | 4 +--
.../internal/providers/ImageThumbnailProvider.java | 2 +-
.../internal/providers/PdfThumbnailProvider.java | 2 +-
.../providers/SlideShowThumbnailProvider.java | 2 +-
.../internal/providers/TikaFallbackProvider.java | 2 +-
.../internal/transformers/ColorizeHandler.java | 2 +-
.../internal/transformers/CropHandler.java | 7 ++--
.../{TransparencyHandler.java => FlipHandler.java} | 32 +++++++++++--------
.../internal/transformers/GreyscaleHandler.java | 2 +-
.../internal/transformers/ResizeHandler.java | 15 ++++++---
.../internal/transformers/RotateHandler.java | 2 +-
.../internal/transformers/ScaleHandler.java | 25 +++++++++------
.../internal/transformers/TransparencyHandler.java | 2 +-
.../internal/DynamicTransformServletTest.java | 4 +--
.../internal/ThumbnailsWebConsoleTest.java | 4 +--
.../thumbnails/internal/TransformServletTest.java | 4 +--
.../thumbnails/internal/TransformerImplTest.java | 4 +--
.../providers/SlideShowThumbnailProviderTest.java | 2 +-
.../internal/transformers/CropHandlerTest.java | 14 +++++++-
...{ScaleHandlerTest.java => FlipHandlerTest.java} | 37 +++++++---------------
.../internal/transformers/ResizeHandlerTest.java | 12 +++++++
.../internal/transformers/ScaleHandlerTest.java | 19 +++++++++++
29 files changed, 164 insertions(+), 87 deletions(-)
diff --git a/org.apache.sling.commons.thumbnail/NOTICE b/org.apache.sling.commons.thumbnail/NOTICE
index c91d59c..c64a19b 100644
--- a/org.apache.sling.commons.thumbnail/NOTICE
+++ b/org.apache.sling.commons.thumbnail/NOTICE
@@ -1,4 +1,4 @@
-Apache Sling App CMS - Transformer
+Apache Sling Commons Thumbnails
Copyright 2019 The Apache Software Foundation
This product includes software developed at
diff --git a/org.apache.sling.commons.thumbnail/README.md b/org.apache.sling.commons.thumbnail/README.md
index 9bfba3a..09281bd 100644
--- a/org.apache.sling.commons.thumbnail/README.md
+++ b/org.apache.sling.commons.thumbnail/README.md
@@ -241,9 +241,9 @@ N/A
Resizes an image to the size specified. If only one dimension is specified the image will be sized to the other
-_Implementation_: `org.apache.sling.commons.thumbnails.internal.transformers.ColorizeHandler`
+_Implementation_: `org.apache.sling.commons.thumbnails.internal.transformers.ResizeHandler`
-_Handler Type_: `sling/commons/thumbnails/transformers/colorize`
+_Handler Type_: `sling/commons/thumbnails/transformers/resize`
_Parameters_
@@ -275,9 +275,9 @@ _Handler Type_: `sling/commons/thumbnails/transformers/scale`
_Parameters_
-- both - scale the thumbnail by the same factor for width and height (0 - 1.0+)
-- width - scale the thumbnail width (0 - 1.0+)
-- height - scale the thumbnail height (0 - 1.0+)
+- both - scale the thumbnail by the same factor for width and height (0+ - 1.0+)
+- width - scale the thumbnail width (0+ - 1.0+)
+- height - scale the thumbnail height (0+ - 1.0+)
### Transparency Handler
diff --git a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/BadRequestException.java b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/BadRequestException.java
index ad01503..6f118ef 100644
--- a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/BadRequestException.java
+++ b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/BadRequestException.java
@@ -39,4 +39,9 @@ public class BadRequestException extends RuntimeException {
super(String.format(message, properties.entrySet().stream().map(en -> en.getKey() + "=" + en.getValue())
.collect(Collectors.joining("\n"))));
}
+
+ public BadRequestException(String message, ValueMap properties, Exception cause) {
+ super(String.format(message, properties.entrySet().stream().map(en -> en.getKey() + "=" + en.getValue())
+ .collect(Collectors.joining("\n"))), cause);
+ }
}
\ No newline at end of file
diff --git a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/ThumbnailProvider.java b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/extension/ThumbnailProvider.java
similarity index 97%
rename from org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/ThumbnailProvider.java
rename to org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/extension/ThumbnailProvider.java
index df5871f..92fdf56 100644
--- a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/ThumbnailProvider.java
+++ b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/extension/ThumbnailProvider.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sling.commons.thumbnails;
+package org.apache.sling.commons.thumbnails.extension;
import java.io.IOException;
import java.io.InputStream;
diff --git a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/TransformationHandler.java b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/extension/TransformationHandler.java
similarity index 93%
rename from org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/TransformationHandler.java
rename to org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/extension/TransformationHandler.java
index 33dc7ad..7e35552 100644
--- a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/TransformationHandler.java
+++ b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/extension/TransformationHandler.java
@@ -14,12 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sling.commons.thumbnails;
+package org.apache.sling.commons.thumbnails.extension;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import org.apache.sling.commons.thumbnails.TransformationHandlerConfig;
import org.osgi.annotation.versioning.ConsumerType;
/*
diff --git a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/extension/package-info.java b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/extension/package-info.java
new file mode 100644
index 0000000..87d2208
--- /dev/null
+++ b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/extension/package-info.java
@@ -0,0 +1,26 @@
+/*
+ * 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.
+ */
+
+/**
+ * Extension points for file thumbnail generation and transformation
+ *
+ * @since 1.0.0
+ */
+@org.osgi.annotation.versioning.Version("1.0.0")
+package org.apache.sling.commons.thumbnails.extension;
diff --git a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/ThumbnailsWebConsole.java b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/ThumbnailsWebConsole.java
index 1d79a24..ece6151 100644
--- a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/ThumbnailsWebConsole.java
+++ b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/ThumbnailsWebConsole.java
@@ -30,10 +30,10 @@ import com.google.common.collect.Lists;
import org.apache.felix.webconsole.AbstractWebConsolePlugin;
import org.apache.felix.webconsole.WebConsoleConstants;
-import org.apache.sling.commons.thumbnails.ThumbnailProvider;
import org.apache.sling.commons.thumbnails.ThumbnailSupport;
-import org.apache.sling.commons.thumbnails.TransformationHandler;
import org.apache.sling.commons.thumbnails.Transformer;
+import org.apache.sling.commons.thumbnails.extension.ThumbnailProvider;
+import org.apache.sling.commons.thumbnails.extension.TransformationHandler;
import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
diff --git a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/TransformerImpl.java b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/TransformerImpl.java
index 057aeea..51a4d6e 100644
--- a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/TransformerImpl.java
+++ b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/TransformerImpl.java
@@ -27,12 +27,12 @@ import org.apache.commons.io.IOUtils;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.commons.thumbnails.BadRequestException;
import org.apache.sling.commons.thumbnails.OutputFileFormat;
-import org.apache.sling.commons.thumbnails.ThumbnailProvider;
import org.apache.sling.commons.thumbnails.ThumbnailSupport;
import org.apache.sling.commons.thumbnails.Transformation;
-import org.apache.sling.commons.thumbnails.TransformationHandler;
import org.apache.sling.commons.thumbnails.TransformationHandlerConfig;
import org.apache.sling.commons.thumbnails.Transformer;
+import org.apache.sling.commons.thumbnails.extension.ThumbnailProvider;
+import org.apache.sling.commons.thumbnails.extension.TransformationHandler;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
diff --git a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/providers/ImageThumbnailProvider.java b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/providers/ImageThumbnailProvider.java
index ad189e5..831c078 100644
--- a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/providers/ImageThumbnailProvider.java
+++ b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/providers/ImageThumbnailProvider.java
@@ -21,7 +21,7 @@ import java.io.InputStream;
import com.google.common.net.MediaType;
import org.apache.sling.api.resource.Resource;
-import org.apache.sling.commons.thumbnails.ThumbnailProvider;
+import org.apache.sling.commons.thumbnails.extension.ThumbnailProvider;
import org.osgi.service.component.annotations.Component;
/**
diff --git a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/providers/PdfThumbnailProvider.java b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/providers/PdfThumbnailProvider.java
index 13c95c9..dc7fab5 100644
--- a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/providers/PdfThumbnailProvider.java
+++ b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/providers/PdfThumbnailProvider.java
@@ -30,7 +30,7 @@ import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.sling.api.resource.Resource;
-import org.apache.sling.commons.thumbnails.ThumbnailProvider;
+import org.apache.sling.commons.thumbnails.extension.ThumbnailProvider;
import org.osgi.service.component.annotations.Component;
/**
diff --git a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/providers/SlideShowThumbnailProvider.java b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/providers/SlideShowThumbnailProvider.java
index 2ecd21d..bd2f3d5 100644
--- a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/providers/SlideShowThumbnailProvider.java
+++ b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/providers/SlideShowThumbnailProvider.java
@@ -38,8 +38,8 @@ import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
import org.apache.sling.commons.thumbnails.OutputFileFormat;
-import org.apache.sling.commons.thumbnails.ThumbnailProvider;
import org.apache.sling.commons.thumbnails.ThumbnailSupport;
+import org.apache.sling.commons.thumbnails.extension.ThumbnailProvider;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
diff --git a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/providers/TikaFallbackProvider.java b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/providers/TikaFallbackProvider.java
index 9546794..57fb6cc 100644
--- a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/providers/TikaFallbackProvider.java
+++ b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/providers/TikaFallbackProvider.java
@@ -28,7 +28,7 @@ import javax.swing.JEditorPane;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.commons.thumbnails.OutputFileFormat;
-import org.apache.sling.commons.thumbnails.ThumbnailProvider;
+import org.apache.sling.commons.thumbnails.extension.ThumbnailProvider;
import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
diff --git a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/ColorizeHandler.java b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/ColorizeHandler.java
index 0644b13..1af78f3 100644
--- a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/ColorizeHandler.java
+++ b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/ColorizeHandler.java
@@ -23,8 +23,8 @@ import java.io.OutputStream;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.commons.thumbnails.BadRequestException;
-import org.apache.sling.commons.thumbnails.TransformationHandler;
import org.apache.sling.commons.thumbnails.TransformationHandlerConfig;
+import org.apache.sling.commons.thumbnails.extension.TransformationHandler;
import org.osgi.service.component.annotations.Component;
import net.coobird.thumbnailator.Thumbnails;
diff --git a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/CropHandler.java b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/CropHandler.java
index cb8b95c..7fda7b5 100644
--- a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/CropHandler.java
+++ b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/CropHandler.java
@@ -22,8 +22,8 @@ import java.io.OutputStream;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.commons.thumbnails.BadRequestException;
-import org.apache.sling.commons.thumbnails.TransformationHandler;
import org.apache.sling.commons.thumbnails.TransformationHandlerConfig;
+import org.apache.sling.commons.thumbnails.extension.TransformationHandler;
import org.osgi.service.component.annotations.Component;
import net.coobird.thumbnailator.Thumbnails;
@@ -54,10 +54,11 @@ public class CropHandler implements TransformationHandler {
try {
Positions pos = Positions.valueOf(positionStr);
builder.crop(pos);
+ builder.toOutputStream(outputStream);
} catch (IllegalArgumentException e) {
- throw new BadRequestException("Unable to crop due to invalid crop position: " + positionStr, e);
+ throw new BadRequestException("Unable to crop due to invalid configuration: \n%s", config.getProperties(),
+ e);
}
- builder.toOutputStream(outputStream);
}
private static void resize(Builder<? extends InputStream> builder, ValueMap properties) {
diff --git a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/TransparencyHandler.java b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/FlipHandler.java
similarity index 69%
copy from org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/TransparencyHandler.java
copy to org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/FlipHandler.java
index 7921618..029cf05 100644
--- a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/TransparencyHandler.java
+++ b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/FlipHandler.java
@@ -20,24 +20,25 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.commons.thumbnails.BadRequestException;
-import org.apache.sling.commons.thumbnails.TransformationHandler;
import org.apache.sling.commons.thumbnails.TransformationHandlerConfig;
+import org.apache.sling.commons.thumbnails.extension.TransformationHandler;
import org.osgi.service.component.annotations.Component;
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.Thumbnails.Builder;
-import net.coobird.thumbnailator.filters.Transparency;
+import net.coobird.thumbnailator.filters.Flip;
+import net.coobird.thumbnailator.filters.ImageFilter;
/**
- * A transformer for making an image transparent
+ * Fips the image
*/
@Component(service = TransformationHandler.class, immediate = true)
-public class TransparencyHandler implements TransformationHandler {
+public class FlipHandler implements TransformationHandler {
- public static final String RESOURCE_TYPE = "sling/commons/thumbnails/transformers/transparency";
- public static final String PN_BOTH = "both";
+ public static final String RESOURCE_TYPE = "sling/commons/thumbnails/transformers/flip";
+
+ public static final String PN_DIRECTION = "direction";
@Override
public String getResourceType() {
@@ -47,18 +48,21 @@ public class TransparencyHandler implements TransformationHandler {
@Override
public void handle(InputStream inputStream, OutputStream outputStream, TransformationHandlerConfig config)
throws IOException {
- Builder<? extends InputStream> builder = Thumbnails.of(inputStream);
- ValueMap properties = config.getProperties();
- double alpha = properties.get(ColorizeHandler.PN_ALPHA, 0.0);
+ String direction = config.getProperties().get(PN_DIRECTION, "").toUpperCase();
- if (alpha < 0 || alpha > 1.0) {
- throw new BadRequestException("Unable to make transparent, bad alpha value " + alpha);
+ ImageFilter flipper = null;
+ if ("HORIZONTAL".equals(direction)) {
+ flipper = Flip.HORIZONTAL;
+ } else if ("VERTICAL".equals(direction)) {
+ flipper = Flip.VERTICAL;
+ } else {
+ throw new BadRequestException("Could not flip image with configuration: \n%s", config.getProperties());
}
- builder.addFilter(new Transparency(alpha));
+ Builder<? extends InputStream> builder = Thumbnails.of(inputStream);
+ builder.addFilter(flipper);
builder.scale(1.0);
-
builder.toOutputStream(outputStream);
}
diff --git a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/GreyscaleHandler.java b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/GreyscaleHandler.java
index fc22ea6..77bd9a2 100644
--- a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/GreyscaleHandler.java
+++ b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/GreyscaleHandler.java
@@ -21,8 +21,8 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import org.apache.sling.commons.thumbnails.TransformationHandler;
import org.apache.sling.commons.thumbnails.TransformationHandlerConfig;
+import org.apache.sling.commons.thumbnails.extension.TransformationHandler;
import org.osgi.service.component.annotations.Component;
import net.coobird.thumbnailator.Thumbnails;
diff --git a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/ResizeHandler.java b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/ResizeHandler.java
index 6dcd1bd..b545c46 100644
--- a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/ResizeHandler.java
+++ b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/ResizeHandler.java
@@ -22,8 +22,8 @@ import java.io.OutputStream;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.commons.thumbnails.BadRequestException;
-import org.apache.sling.commons.thumbnails.TransformationHandler;
import org.apache.sling.commons.thumbnails.TransformationHandlerConfig;
+import org.apache.sling.commons.thumbnails.extension.TransformationHandler;
import org.osgi.service.component.annotations.Component;
import net.coobird.thumbnailator.Thumbnails;
@@ -50,12 +50,17 @@ public class ResizeHandler implements TransformationHandler {
throws IOException {
Builder<? extends InputStream> builder = Thumbnails.of(inputStream);
- resize(builder, config.getProperties());
+ try {
+ resize(builder, config.getProperties());
- boolean keepAspectRatio = config.getProperties().get(PN_KEEP_ASPECT_RATIO, true);
- builder.keepAspectRatio(keepAspectRatio);
+ boolean keepAspectRatio = config.getProperties().get(PN_KEEP_ASPECT_RATIO, true);
+ builder.keepAspectRatio(keepAspectRatio);
- builder.toOutputStream(outputStream);
+ builder.toOutputStream(outputStream);
+ } catch (IllegalArgumentException e) {
+ throw new BadRequestException("Unable to resize due to invalid configuration: \n%s", config.getProperties(),
+ e);
+ }
}
private static void resize(Builder<? extends InputStream> builder, ValueMap properties) {
diff --git a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/RotateHandler.java b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/RotateHandler.java
index 569a94c..dd9525b 100644
--- a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/RotateHandler.java
+++ b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/RotateHandler.java
@@ -20,8 +20,8 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import org.apache.sling.commons.thumbnails.TransformationHandler;
import org.apache.sling.commons.thumbnails.TransformationHandlerConfig;
+import org.apache.sling.commons.thumbnails.extension.TransformationHandler;
import org.osgi.service.component.annotations.Component;
import net.coobird.thumbnailator.Thumbnails;
diff --git a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/ScaleHandler.java b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/ScaleHandler.java
index 4e2b7c3..36da131 100644
--- a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/ScaleHandler.java
+++ b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/ScaleHandler.java
@@ -22,8 +22,8 @@ import java.io.OutputStream;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.commons.thumbnails.BadRequestException;
-import org.apache.sling.commons.thumbnails.TransformationHandler;
import org.apache.sling.commons.thumbnails.TransformationHandlerConfig;
+import org.apache.sling.commons.thumbnails.extension.TransformationHandler;
import org.osgi.service.component.annotations.Component;
import net.coobird.thumbnailator.Thumbnails;
@@ -46,20 +46,25 @@ public class ScaleHandler implements TransformationHandler {
@Override
public void handle(InputStream inputStream, OutputStream outputStream, TransformationHandlerConfig config)
throws IOException {
- Builder<? extends InputStream> builder = Thumbnails.of(inputStream);
ValueMap properties = config.getProperties();
double both = properties.get(PN_BOTH, -1.0);
double width = properties.get(ResizeHandler.PN_WIDTH, -1.0);
double height = properties.get(ResizeHandler.PN_HEIGHT, -1.0);
- if (both >= 0) {
- builder.scale(both);
- } else if (width >= 0 && height >= 0) {
- builder.scale(width, height);
- } else {
- throw new BadRequestException("Could not scale thumbnail, invalid paramters: \n%s", properties);
- }
+ try {
+ Builder<? extends InputStream> builder = Thumbnails.of(inputStream);
+ if (both >= 0) {
+ builder.scale(both);
+ } else if (width >= 0 && height >= 0) {
+ builder.scale(width, height);
+ } else {
+ throw new BadRequestException("Could not scale thumbnail, invalid paramters: \n%s", properties);
+ }
- builder.toOutputStream(outputStream);
+ builder.toOutputStream(outputStream);
+ } catch (IllegalArgumentException e) {
+ throw new BadRequestException("Unable to resize due to invalid configuration: \n%s", config.getProperties(),
+ e);
+ }
}
}
diff --git a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/TransparencyHandler.java b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/TransparencyHandler.java
index 7921618..8058bd1 100644
--- a/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/TransparencyHandler.java
+++ b/org.apache.sling.commons.thumbnail/src/main/java/org/apache/sling/commons/thumbnails/internal/transformers/TransparencyHandler.java
@@ -22,8 +22,8 @@ import java.io.OutputStream;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.commons.thumbnails.BadRequestException;
-import org.apache.sling.commons.thumbnails.TransformationHandler;
import org.apache.sling.commons.thumbnails.TransformationHandlerConfig;
+import org.apache.sling.commons.thumbnails.extension.TransformationHandler;
import org.osgi.service.component.annotations.Component;
import net.coobird.thumbnailator.Thumbnails;
diff --git a/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/DynamicTransformServletTest.java b/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/DynamicTransformServletTest.java
index b48f25d..ea36641 100644
--- a/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/DynamicTransformServletTest.java
+++ b/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/DynamicTransformServletTest.java
@@ -29,9 +29,9 @@ import java.util.List;
import javax.servlet.ServletException;
import org.apache.sling.api.resource.LoginException;
-import org.apache.sling.commons.thumbnails.ThumbnailProvider;
import org.apache.sling.commons.thumbnails.ThumbnailSupport;
-import org.apache.sling.commons.thumbnails.TransformationHandler;
+import org.apache.sling.commons.thumbnails.extension.ThumbnailProvider;
+import org.apache.sling.commons.thumbnails.extension.TransformationHandler;
import org.apache.sling.commons.thumbnails.internal.providers.ImageThumbnailProvider;
import org.apache.sling.commons.thumbnails.internal.providers.PdfThumbnailProvider;
import org.apache.sling.commons.thumbnails.internal.transformers.CropHandler;
diff --git a/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/ThumbnailsWebConsoleTest.java b/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/ThumbnailsWebConsoleTest.java
index 4fa721d..72713b9 100644
--- a/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/ThumbnailsWebConsoleTest.java
+++ b/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/ThumbnailsWebConsoleTest.java
@@ -30,9 +30,9 @@ import javax.servlet.ServletException;
import org.apache.commons.io.IOUtils;
import org.apache.sling.api.resource.LoginException;
-import org.apache.sling.commons.thumbnails.ThumbnailProvider;
import org.apache.sling.commons.thumbnails.ThumbnailSupport;
-import org.apache.sling.commons.thumbnails.TransformationHandler;
+import org.apache.sling.commons.thumbnails.extension.ThumbnailProvider;
+import org.apache.sling.commons.thumbnails.extension.TransformationHandler;
import org.apache.sling.commons.thumbnails.internal.providers.ImageThumbnailProvider;
import org.apache.sling.commons.thumbnails.internal.providers.PdfThumbnailProvider;
import org.apache.sling.commons.thumbnails.internal.transformers.CropHandler;
diff --git a/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/TransformServletTest.java b/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/TransformServletTest.java
index ff3ca05..b8c4daa 100644
--- a/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/TransformServletTest.java
+++ b/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/TransformServletTest.java
@@ -34,10 +34,10 @@ import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
-import org.apache.sling.commons.thumbnails.ThumbnailProvider;
import org.apache.sling.commons.thumbnails.ThumbnailSupport;
-import org.apache.sling.commons.thumbnails.TransformationHandler;
import org.apache.sling.commons.thumbnails.TransformationHandlerConfig;
+import org.apache.sling.commons.thumbnails.extension.ThumbnailProvider;
+import org.apache.sling.commons.thumbnails.extension.TransformationHandler;
import org.apache.sling.commons.thumbnails.internal.models.TransformationHandlerConfigImpl;
import org.apache.sling.commons.thumbnails.internal.models.TransformationImpl;
import org.apache.sling.commons.thumbnails.internal.providers.ImageThumbnailProvider;
diff --git a/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/TransformerImplTest.java b/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/TransformerImplTest.java
index a5161b4..5328b3a 100644
--- a/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/TransformerImplTest.java
+++ b/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/TransformerImplTest.java
@@ -30,11 +30,11 @@ import java.util.Map;
import org.apache.sling.commons.thumbnails.BadRequestException;
import org.apache.sling.commons.thumbnails.OutputFileFormat;
-import org.apache.sling.commons.thumbnails.ThumbnailProvider;
import org.apache.sling.commons.thumbnails.ThumbnailSupport;
-import org.apache.sling.commons.thumbnails.TransformationHandler;
import org.apache.sling.commons.thumbnails.TransformationHandlerConfig;
import org.apache.sling.commons.thumbnails.Transformer;
+import org.apache.sling.commons.thumbnails.extension.ThumbnailProvider;
+import org.apache.sling.commons.thumbnails.extension.TransformationHandler;
import org.apache.sling.commons.thumbnails.internal.models.TransformationHandlerConfigImpl;
import org.apache.sling.commons.thumbnails.internal.models.TransformationImpl;
import org.apache.sling.commons.thumbnails.internal.providers.ImageThumbnailProvider;
diff --git a/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/providers/SlideShowThumbnailProviderTest.java b/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/providers/SlideShowThumbnailProviderTest.java
index 9f59e77..2b1d8dc 100644
--- a/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/providers/SlideShowThumbnailProviderTest.java
+++ b/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/providers/SlideShowThumbnailProviderTest.java
@@ -26,8 +26,8 @@ import java.io.IOException;
import java.util.Collections;
import org.apache.sling.api.resource.Resource;
-import org.apache.sling.commons.thumbnails.ThumbnailProvider;
import org.apache.sling.commons.thumbnails.ThumbnailSupport;
+import org.apache.sling.commons.thumbnails.extension.ThumbnailProvider;
import org.apache.sling.commons.thumbnails.internal.ContextHelper;
import org.apache.sling.testing.mock.sling.junit.SlingContext;
import org.junit.Before;
diff --git a/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/transformers/CropHandlerTest.java b/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/transformers/CropHandlerTest.java
index 31031dd..d54c8cb 100644
--- a/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/transformers/CropHandlerTest.java
+++ b/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/transformers/CropHandlerTest.java
@@ -80,7 +80,19 @@ public class CropHandlerTest {
@Test(expected = BadRequestException.class)
public void testMissingWidthHeight() throws IOException {
- TransformationHandlerConfig config = new TransformationHandlerConfigImpl("/conf", Collections.singletonMap(CropHandler.PN_POSITION, "center"));
+ TransformationHandlerConfig config = new TransformationHandlerConfigImpl("/conf",
+ Collections.singletonMap(CropHandler.PN_POSITION, "center"));
+ cropper.handle(inputStream, outputStream, config);
+ }
+
+ @Test(expected = BadRequestException.class)
+ public void testInvalidHuge() throws IOException {
+
+ Map<String, Object> properties = new HashMap<>();
+ properties.put(ResizeHandler.PN_WIDTH, Integer.MAX_VALUE);
+ properties.put(ResizeHandler.PN_HEIGHT, Integer.MAX_VALUE);
+
+ TransformationHandlerConfig config = new TransformationHandlerConfigImpl("/conf", properties);
cropper.handle(inputStream, outputStream, config);
}
diff --git a/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/transformers/ScaleHandlerTest.java b/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/transformers/FlipHandlerTest.java
similarity index 72%
copy from org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/transformers/ScaleHandlerTest.java
copy to org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/transformers/FlipHandlerTest.java
index 6607935..5c9271f 100644
--- a/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/transformers/ScaleHandlerTest.java
+++ b/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/transformers/FlipHandlerTest.java
@@ -16,7 +16,6 @@
*/
package org.apache.sling.commons.thumbnails.internal.transformers;
-import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import java.io.ByteArrayOutputStream;
@@ -31,55 +30,43 @@ import org.apache.sling.commons.thumbnails.internal.models.TransformationHandler
import org.junit.Before;
import org.junit.Test;
-public class ScaleHandlerTest {
+public class FlipHandlerTest {
private InputStream inputStream;
private ByteArrayOutputStream outputStream;
- private ScaleHandler scaler;
+ private FlipHandler flop;
@Before
public void init() {
inputStream = getClass().getClassLoader().getResourceAsStream("apache.png");
outputStream = new ByteArrayOutputStream();
- scaler = new ScaleHandler();
+ flop = new FlipHandler();
}
@Test
- public void testResourceType() throws IOException {
- assertEquals("sling/commons/thumbnails/transformers/scale", scaler.getResourceType());
- }
-
- @Test
- public void testScaleBoth() throws IOException {
-
+ public void testFlipHorizontal() throws IOException {
Map<String, Object> properties = new HashMap<>();
- properties.put(ScaleHandler.PN_BOTH, 2);
-
+ properties.put(FlipHandler.PN_DIRECTION, "horizontal");
TransformationHandlerConfig config = new TransformationHandlerConfigImpl("/conf", properties);
- scaler.handle(inputStream, outputStream, config);
+ flop.handle(inputStream, outputStream, config);
assertNotEquals(0, outputStream.toByteArray().length);
}
@Test
- public void testScaleWidthAndHeight() throws IOException {
-
+ public void testFlipVertical() throws IOException {
Map<String, Object> properties = new HashMap<>();
- properties.put(ResizeHandler.PN_WIDTH, 2);
- properties.put(ResizeHandler.PN_HEIGHT, 1);
-
+ properties.put(FlipHandler.PN_DIRECTION, "VERTICAL");
TransformationHandlerConfig config = new TransformationHandlerConfigImpl("/conf", properties);
- scaler.handle(inputStream, outputStream, config);
+ flop.handle(inputStream, outputStream, config);
assertNotEquals(0, outputStream.toByteArray().length);
}
@Test(expected = BadRequestException.class)
- public void testInvalidScale() throws IOException {
-
+ public void testInvalidDirection() throws IOException {
Map<String, Object> properties = new HashMap<>();
- properties.put(ResizeHandler.PN_WIDTH, 2);
-
+ properties.put(FlipHandler.PN_DIRECTION, "asdf");
TransformationHandlerConfig config = new TransformationHandlerConfigImpl("/conf", properties);
- scaler.handle(inputStream, outputStream, config);
+ flop.handle(inputStream, outputStream, config);
}
}
diff --git a/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/transformers/ResizeHandlerTest.java b/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/transformers/ResizeHandlerTest.java
index 7e90136..23d4a5b 100644
--- a/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/transformers/ResizeHandlerTest.java
+++ b/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/transformers/ResizeHandlerTest.java
@@ -25,6 +25,7 @@ import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
+import org.apache.sling.commons.thumbnails.BadRequestException;
import org.apache.sling.commons.thumbnails.TransformationHandlerConfig;
import org.apache.sling.commons.thumbnails.internal.models.TransformationHandlerConfigImpl;
import org.junit.Before;
@@ -79,4 +80,15 @@ public class ResizeHandlerTest {
assertNotNull(outputStream.toByteArray());
}
+ @Test(expected = BadRequestException.class)
+ public void testInvalidHuge() throws IOException {
+
+ Map<String, Object> properties = new HashMap<>();
+ properties.put(ResizeHandler.PN_WIDTH, Integer.MAX_VALUE);
+ properties.put(ResizeHandler.PN_HEIGHT, Integer.MAX_VALUE);
+
+ TransformationHandlerConfig config = new TransformationHandlerConfigImpl("/conf", properties);
+ sizer.handle(inputStream, outputStream, config);
+ }
+
}
diff --git a/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/transformers/ScaleHandlerTest.java b/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/transformers/ScaleHandlerTest.java
index 6607935..4fb4b5b 100644
--- a/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/transformers/ScaleHandlerTest.java
+++ b/org.apache.sling.commons.thumbnail/src/test/java/org/apache/sling/commons/thumbnails/internal/transformers/ScaleHandlerTest.java
@@ -82,4 +82,23 @@ public class ScaleHandlerTest {
scaler.handle(inputStream, outputStream, config);
}
+ @Test(expected = BadRequestException.class)
+ public void testInvalidScaleWidth() throws IOException {
+
+ Map<String, Object> properties = new HashMap<>();
+ properties.put(ResizeHandler.PN_HEIGHT, 2);
+
+ TransformationHandlerConfig config = new TransformationHandlerConfigImpl("/conf", properties);
+ scaler.handle(inputStream, outputStream, config);
+ }
+
+ @Test(expected = BadRequestException.class)
+ public void testInvalidHugeScale() throws IOException {
+
+ Map<String, Object> properties = new HashMap<>();
+ properties.put(ScaleHandler.PN_BOTH, Integer.MAX_VALUE);
+
+ TransformationHandlerConfig config = new TransformationHandlerConfigImpl("/conf", properties);
+ scaler.handle(inputStream, outputStream, config);
+ }
}