Skip to content

Commit 8864795

Browse files
ComponentFeatureImageResolver: Use component resource path for wrapped feature image resource to be able to apply content policies (#37)
1 parent 9f05c3f commit 8864795

File tree

5 files changed

+32
-12
lines changed

5 files changed

+32
-12
lines changed

Diff for: bundles/core/src/main/java/io/wcm/wcm/core/components/impl/models/helpers/PageListItemV4Impl.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,8 @@ private Resource buildTeaserResource(@NotNull String delegateResourceType) {
192192
overriddenProperties.put(PN_LINK_CONTENT_REF, this.getPath());
193193
}
194194

195-
return new CoreResourceWrapper(resourceToBeWrapped, delegateResourceType, overriddenProperties, hiddenProperties);
195+
return new CoreResourceWrapper(resourceToBeWrapped, resourceToBeWrapped.getPath(),
196+
delegateResourceType, overriddenProperties, hiddenProperties);
196197
}
197198

198199
@JsonIgnore

Diff for: bundles/core/src/main/java/io/wcm/wcm/core/components/impl/util/ComponentFeatureImageResolver.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,10 @@ public ComponentFeatureImageResolver altValueFromDam(boolean value) {
160160
if (resource == null) {
161161
return null;
162162
}
163-
return new CoreResourceWrapper(resource, HandlerUnwrapper.getResourceType(componentResource));
163+
return new CoreResourceWrapper(resource,
164+
// use path of component resource to get policy mappings for those
165+
componentResource.getPath(),
166+
HandlerUnwrapper.getResourceType(componentResource));
164167
}
165168

166169
/**

Diff for: bundles/core/src/main/java/io/wcm/wcm/core/components/impl/util/CoreResourceWrapper.java

+14-5
Original file line numberDiff line numberDiff line change
@@ -42,26 +42,30 @@
4242
@Exporter(name = ExporterConstants.SLING_MODEL_EXPORTER_NAME, extensions = ExporterConstants.SLING_MODEL_EXTENSION)
4343
public final class CoreResourceWrapper extends ResourceWrapper {
4444

45-
private ValueMap valueMap;
46-
private String overriddenResourceType;
45+
private final String path;
46+
private final ValueMap valueMap;
47+
private final String overriddenResourceType;
4748

4849
/**
4950
* @param resource Target resource
51+
* @param path Path of wrapped resource
5052
* @param overriddenResourceType New resource type
5153
*/
52-
public CoreResourceWrapper(@NotNull Resource resource, @NotNull String overriddenResourceType) {
53-
this(resource, overriddenResourceType, null, null);
54+
public CoreResourceWrapper(@NotNull Resource resource, @NotNull String path, @NotNull String overriddenResourceType) {
55+
this(resource, path, overriddenResourceType, null, null);
5456
}
5557

5658
/**
5759
* @param resource Target resource
60+
* @param path Path of wrapped resource
5861
* @param overriddenResourceType New resource type
5962
* @param overriddenProperties Properties to add/overwrite in value map
6063
* @param hiddenProperties Properties to hide from value map
6164
*/
62-
public CoreResourceWrapper(@NotNull Resource resource, @NotNull String overriddenResourceType,
65+
public CoreResourceWrapper(@NotNull Resource resource, @NotNull String path, @NotNull String overriddenResourceType,
6366
@Nullable Map<String, Object> overriddenProperties, @Nullable Set<String> hiddenProperties) {
6467
super(resource);
68+
this.path = path;
6569
if (StringUtils.isEmpty(overriddenResourceType)) {
6670
throw new IllegalArgumentException("The " + CoreResourceWrapper.class.getName() + " needs to override the resource type of " +
6771
"the wrapped resource, but the resourceType argument was null or empty.");
@@ -77,6 +81,11 @@ public CoreResourceWrapper(@NotNull Resource resource, @NotNull String overridde
7781
}
7882
}
7983

84+
@Override
85+
public String getPath() {
86+
return path;
87+
}
88+
8089
@Override
8190
@SuppressWarnings("unchecked")
8291
public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {

Diff for: bundles/core/src/test/java/io/wcm/wcm/core/components/impl/util/CoreResourceWrapperTest.java

+9-5
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ void testWrappingWithSimpleResource() {
5959
"a", 1,
6060
"b", 2,
6161
ResourceResolver.PROPERTY_RESOURCE_TYPE, "a/b/c");
62-
Resource wrappedResource = new CoreResourceWrapper(resource, "d/e/f");
62+
Resource wrappedResource = new CoreResourceWrapper(resource, resource.getPath(), "d/e/f");
63+
64+
assertEquals(resource.getPath(), wrappedResource.getPath());
6365

6466
Map<String, Object> expectedProperties = new HashMap<>(resource.getValueMap());
6567
expectedProperties.put(ResourceResolver.PROPERTY_RESOURCE_TYPE, "d/e/f");
@@ -74,7 +76,9 @@ void testWrappingWithHiddenProperties() {
7476
"a", 1,
7577
"b", 2,
7678
ResourceResolver.PROPERTY_RESOURCE_TYPE, "a/b/c");
77-
Resource wrappedResource = new CoreResourceWrapper(resource, "d/e/f", null, Set.of("b"));
79+
Resource wrappedResource = new CoreResourceWrapper(resource, "/content/test2", "d/e/f", null, Set.of("b"));
80+
81+
assertEquals("/content/test2", wrappedResource.getPath());
7882

7983
Map<String, Object> expectedProperties = new HashMap<>(resource.getValueMap());
8084
expectedProperties.put(ResourceResolver.PROPERTY_RESOURCE_TYPE, "d/e/f");
@@ -95,7 +99,7 @@ void testWrappingWithOverridenProperties() {
9599
Map<String, Object> overriddenProperties = ImmutableValueMap.of(
96100
"a", "1",
97101
"b", "2");
98-
Resource wrappedResource = new CoreResourceWrapper(resource, "a/b/c", overriddenProperties, null);
102+
Resource wrappedResource = new CoreResourceWrapper(resource, resource.getPath(), "a/b/c", overriddenProperties, null);
99103

100104
// isResourceType()
101105
assertTrue(wrappedResource.isResourceType("a/b/c"));
@@ -113,7 +117,7 @@ void testWrappingWithOverridenProperties() {
113117
@Test
114118
@SuppressWarnings("null")
115119
void testNulls() {
116-
assertThrows(IllegalArgumentException.class, () -> new CoreResourceWrapper(null, null));
120+
assertThrows(IllegalArgumentException.class, () -> new CoreResourceWrapper(null, null, null));
117121
}
118122

119123
@Test
@@ -124,7 +128,7 @@ void isResourceTypeDelegated() {
124128
when(toBeWrapped.getValueMap()).thenReturn(new ValueMapDecorator(Collections.emptyMap()));
125129
when(toBeWrapped.getResourceResolver()).thenReturn(resourceResolver);
126130
when(resourceResolver.isResourceType(any(CoreResourceWrapper.class), any(String.class))).thenReturn(true);
127-
Resource wrappedResource = new CoreResourceWrapper(toBeWrapped, "a/b/c");
131+
Resource wrappedResource = new CoreResourceWrapper(toBeWrapped, toBeWrapped.getPath(), "a/b/c");
128132
assertTrue(wrappedResource.isResourceType("a/b/c"));
129133
verify(resourceResolver).isResourceType(wrappedResource, "a/b/c");
130134
}

Diff for: changes.xml

+3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
<action type="fix" dev="sseifert" issue="35">
2929
ComponentFeatureImageResolver: If imageFromPageImage is explicitly set to false, do not fallback to image from page if no reference given in component.
3030
</action>
31+
<action type="fix" dev="sseifert" issue="37">
32+
ComponentFeatureImageResolver: Use component resource path for wrapped feature image resource to be able to apply content policies.
33+
</action>
3134
</release>
3235

3336
<release version="2.0.4-2.25.4" date="2024-06-04">

0 commit comments

Comments
 (0)