You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/11/18 10:07:54 UTC
[isis] branch v2 updated: ISIS-2037: add context-path if required
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/v2 by this push:
new 92f3f9d ISIS-2037: add context-path if required
92f3f9d is described below
commit 92f3f9dfea3cf4153b0a9cc030fb9f2dc2d5a65d
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Nov 18 11:07:48 2018 +0100
ISIS-2037: add context-path if required
Task-Url: https://issues.apache.org/jira/browse/ISIS-2037
---
.../commons/internal/resources/_Resources.java | 26 +++++++--
.../commons/internal/resources/ResourcesTest.java | 66 ++++++++++++++++++++++
.../wicket/ui/components/footer/CreditImage.java | 11 +++-
3 files changed, 98 insertions(+), 5 deletions(-)
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources.java b/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources.java
index 48de647..8da4741 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources.java
@@ -16,21 +16,22 @@
* specific language governing permissions and limitations
* under the License.
*/
-
package org.apache.isis.commons.internal.resources;
-import static org.apache.isis.commons.internal.base._With.ifPresentElseThrow;
-import static org.apache.isis.commons.internal.base._With.requires;
-
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.charset.Charset;
+import java.util.function.Predicate;
+import java.util.regex.Pattern;
import org.apache.isis.commons.internal.base._Bytes;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.context._Context;
+import static org.apache.isis.commons.internal.base._With.ifPresentElseThrow;
+import static org.apache.isis.commons.internal.base._With.requires;
+
/**
* <h1>- internal use only -</h1>
* <p>
@@ -160,6 +161,21 @@ public final class _Resources {
public final static void putRestfulPath(String restfulPath) {
_Context.put(_Resources_RestfulPath.class, new _Resources_RestfulPath(restfulPath), false);
}
+
+ // -- LOCAL vs EXTERNAL resource path
+
+ private static final Predicate<String> externalResourcePattern =
+ Pattern.compile("^\\w+?://.*$").asPredicate();
+
+ /**
+ * Returns whether the {@code resourcePath} is intended local and relative
+ * to the web-app's context root.
+ * @param resourcePath
+ */
+ public static boolean isLocalResource(String resourcePath) {
+ requires(resourcePath, "resourcePath");
+ return !externalResourcePattern.test(resourcePath);
+ }
// -- HELPER
@@ -190,6 +206,8 @@ public final class _Resources {
+
+
diff --git a/core/commons/src/test/java/org/apache/isis/commons/internal/resources/ResourcesTest.java b/core/commons/src/test/java/org/apache/isis/commons/internal/resources/ResourcesTest.java
new file mode 100644
index 0000000..8cc1aee
--- /dev/null
+++ b/core/commons/src/test/java/org/apache/isis/commons/internal/resources/ResourcesTest.java
@@ -0,0 +1,66 @@
+/*
+ * 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.isis.commons.internal.resources;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class ResourcesTest {
+
+ @BeforeEach
+ void setUp() throws Exception {
+ }
+
+ @AfterEach
+ void tearDown() throws Exception {
+ }
+
+ @Test
+ void localRelativeResourcePathDetection() {
+
+ assertTrue(_Resources.isLocalResource("/hello"));
+ assertTrue(_Resources.isLocalResource("/hello/world"));
+ assertTrue(_Resources.isLocalResource("/hello//world"));
+
+ assertTrue(_Resources.isLocalResource("hello"));
+ assertTrue(_Resources.isLocalResource("hello/world"));
+ assertTrue(_Resources.isLocalResource("hello//world"));
+
+ }
+
+ @Test
+ void externalResourcePathDetection() {
+
+ assertFalse(_Resources.isLocalResource("http://hello.world"));
+ assertFalse(_Resources.isLocalResource("http://localhost:8080/hello"));
+ assertFalse(_Resources.isLocalResource("http://localhost:8080/hello"));
+ assertFalse(_Resources.isLocalResource("http://127.0.0.1:8080/hello"));
+
+ assertFalse(_Resources.isLocalResource("https://hello.world"));
+ assertFalse(_Resources.isLocalResource("https://localhost:8080/hello"));
+ assertFalse(_Resources.isLocalResource("https://localhost:8080/hello"));
+ assertFalse(_Resources.isLocalResource("https://127.0.0.1:8080/hello"));
+
+ }
+
+}
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/CreditImage.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/CreditImage.java
index 912a848..17449f2 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/CreditImage.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/CreditImage.java
@@ -21,13 +21,22 @@ package org.apache.isis.viewer.wicket.ui.components.footer;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.WebComponent;
+import static org.apache.isis.commons.internal.resources._Resources.isLocalResource;
+import static org.apache.isis.commons.internal.resources._Resources.prependContextPathIfPresent;
+
public class CreditImage extends WebComponent {
+ private static final long serialVersionUID = 1L;
+
private final String imageUrl;
public CreditImage(final String id, final String imageUrl) {
super(id);
- this.imageUrl = imageUrl;
+
+ this.imageUrl =
+ isLocalResource(imageUrl)
+ ? prependContextPathIfPresent(imageUrl)
+ : imageUrl;
}
@Override