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 b843b12c2fac72dd4376c7f590cd39282f389d0c Author: Dan Klco <[email protected]> AuthorDate: Mon Mar 29 23:10:02 2021 -0400 Adding thumbnail preview servlet for SLING-10266 --- .../core/internal/servlets/PreviewFileServlet.java | 59 ++++++++++++++++++++ .../internal/servlets/PreviewFileServletTest.java | 65 ++++++++++++++++++++++ .../sling-cms/components/cms/tilecard/tilecard.jsp | 2 +- 3 files changed, 125 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/servlets/PreviewFileServlet.java b/core/src/main/java/org/apache/sling/cms/core/internal/servlets/PreviewFileServlet.java new file mode 100644 index 0000000..c9e2f6d --- /dev/null +++ b/core/src/main/java/org/apache/sling/cms/core/internal/servlets/PreviewFileServlet.java @@ -0,0 +1,59 @@ +/* + * 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.core.internal.servlets; + +import java.io.IOException; + +import javax.servlet.Servlet; +import javax.servlet.ServletException; + +import org.apache.sling.api.SlingHttpServletRequest; +import org.apache.sling.api.SlingHttpServletResponse; +import org.apache.sling.api.request.RequestDispatcherOptions; +import org.apache.sling.api.servlets.SlingSafeMethodsServlet; +import org.apache.sling.cms.core.insights.impl.FakeRequest; +import org.apache.sling.engine.SlingRequestProcessor; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; + +@Component(service = Servlet.class, property = { "sling.servlet.resourceTypes=sling-cms/file/preview", + "sling.servlet.methods=GET" }) +public class PreviewFileServlet extends SlingSafeMethodsServlet { + + private static final long serialVersionUID = 6234007100684499058L; + + private SlingRequestProcessor requestProcessor; + + @Activate + public PreviewFileServlet(@Reference SlingRequestProcessor requestProcessor) { + this.requestProcessor = requestProcessor; + } + + @Override + protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) + throws ServletException, IOException { + String suffix = request.getRequestPathInfo().getSuffix(); + + RequestDispatcherOptions options = new RequestDispatcherOptions(); + options.setReplaceSuffix(""); + options.setReplaceSelectors(""); + + requestProcessor.processRequest(new FakeRequest("GET", suffix), response, request.getResourceResolver()); + } + +} diff --git a/core/src/test/java/org/apache/sling/cms/core/internal/servlets/PreviewFileServletTest.java b/core/src/test/java/org/apache/sling/cms/core/internal/servlets/PreviewFileServletTest.java new file mode 100644 index 0000000..9551e56 --- /dev/null +++ b/core/src/test/java/org/apache/sling/cms/core/internal/servlets/PreviewFileServletTest.java @@ -0,0 +1,65 @@ +/* + * 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.core.internal.servlets; + +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; + +import org.apache.sling.api.SlingHttpServletRequest; +import org.apache.sling.api.SlingHttpServletResponse; +import org.apache.sling.api.resource.ResourceResolver; +import org.apache.sling.cms.core.insights.impl.FakeRequest; +import org.apache.sling.engine.SlingRequestProcessor; +import org.apache.sling.engine.impl.request.SlingRequestPathInfo; +import org.junit.Test; +import org.mockito.ArgumentMatcher; +import org.mockito.Mockito; + +public class PreviewFileServletTest { + + @Test + public void testServlet() throws ServletException, IOException { + + String expectedPath = "/test"; + SlingRequestProcessor processor = Mockito.mock(SlingRequestProcessor.class); + PreviewFileServlet pfs = new PreviewFileServlet(processor); + + ResourceResolver resolver = Mockito.mock(ResourceResolver.class); + SlingHttpServletRequest slingRequest = Mockito.mock(SlingHttpServletRequest.class); + Mockito.when(slingRequest.getResourceResolver()).thenReturn(resolver); + SlingRequestPathInfo pathInfo = Mockito.mock(SlingRequestPathInfo.class); + Mockito.when(pathInfo.getSuffix()).thenReturn(expectedPath); + Mockito.when(slingRequest.getRequestPathInfo()).thenReturn(pathInfo); + + SlingHttpServletResponse slingResponse = Mockito.mock(SlingHttpServletResponse.class); + + pfs.doGet(slingRequest, slingResponse); + + Mockito.verify(processor).processRequest(Mockito.argThat(new ArgumentMatcher<HttpServletRequest>() { + + @Override + public boolean matches(HttpServletRequest arg) { + + return arg instanceof FakeRequest && expectedPath.equals(arg.getRequestURI()); + } + + }), Mockito.eq(slingResponse), Mockito.eq(resolver)); + + } +} diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/tilecard/tilecard.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/tilecard/tilecard.jsp index 10d95d5..5ba0016 100644 --- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/tilecard/tilecard.jsp +++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/tilecard/tilecard.jsp @@ -26,7 +26,7 @@ </figure> </div> <footer class="card-footer"> - <a class="card-footer-item" href="${sling:encode(properties.link,'HTML_ATTR')}" title="${sling:encode(properties.title,'HTML')}"> + <a class="card-footer-item item-link" href="${sling:encode(properties.link,'HTML_ATTR')}" title="${sling:encode(properties.title,'HTML')}"> ${sling:encode(properties.title,'HTML')} </a> </footer>
