Skip to content

Commit

Permalink
Merge branch 'master' into defect/ccvar/same-attr-not-updating
Browse files Browse the repository at this point in the history
  • Loading branch information
davidjgonzalez authored Jun 18, 2024
2 parents 1917a83 + 4ccb3e6 commit 897d92b
Show file tree
Hide file tree
Showing 10 changed files with 268 additions and 40 deletions.
7 changes: 6 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,17 @@ The format is based on [Keep a Changelog](http://keepachangelog.com)

- #3275 - CCVAR: Fixed Same Attribute not updating correctly.

## Added
### Added

- #3333 - Use lodash embedded by ACS AEM Commons
- #3323 - Add Provider Type Checker Plugin
- #3338 - Prevent URL modification on dismiss

### Fixed

- #3241 - Fix overlapping Service-Component header entries leading to double registration of components
- #3362 - Prevent System notification while exporting / updating experience fragment to Adobe Target

## 6.6.0 - 2024-04-15

## Added
Expand Down
6 changes: 6 additions & 0 deletions bundle/bnd.bnd
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,10 @@ Import-Package: \
!org.bouncycastle.jce.*,\
!org.checkerframework.checker.nullness.qual,\
*
# support processing of legacy Felix SCR annotations through the felix.scr.bnd plugin, look at https://github.com/apache/felix/blob/trunk/tools/org.apache.felix.scr.bnd/src/main/java/org/apache/felix/scrplugin/bnd/SCRDescriptorBndPlugin.java#L60
# paths require special handling: https://bnd.bndtools.org/chapters/820-instructions.html#file
-plugin.felixscr: org.apache.felix.scrplugin.bnd.SCRDescriptorBndPlugin;destdir="$(basedir)/target/classes";log=error
# also detect scr descriptors from bundle fragments (https://docs.osgi.org/specification/osgi.cmpn/8.0.0/service.component.html#d0e30931)
# this is not properly merged with entries from Felix SCR Bnd plugin, therefore later on patched with m-shade-p
Service-Component: OSGI-INF/*.xml
-classpath: $(basedir)/target/aem-sdk-api-info/
17 changes: 17 additions & 0 deletions bundle/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,15 @@
<plugin>
<groupId>biz.aQute.bnd</groupId>
<artifactId>bnd-maven-plugin</artifactId>
<dependencies>
<!-- https://github.com/apache/felix/tree/trunk/tools/org.apache.felix.scr.bnd, processes deprecated SCR annotations
with the Bnd process -->
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.scr.bnd</artifactId>
<version>1.9.6</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
Expand Down Expand Up @@ -243,6 +252,14 @@
</includes>
</filter>
</filters>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<!-- overwrite Service-Component again, as incorrectly merged by Felix SCR Bnd Plugin -->
<Service-Component>OSGI-INF/*.xml</Service-Component>
</manifestEntries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,11 @@
*/
package com.adobe.acs.commons.models.injectors.impl;

import com.adobe.acs.commons.util.impl.ReflectionUtil;
import com.adobe.granite.asset.api.AssetManager;
import com.day.cq.commons.Externalizer;
import com.day.cq.search.QueryBuilder;
import com.day.cq.tagging.TagManager;
import com.day.cq.wcm.api.policies.ContentPolicyManager;
import org.apache.sling.xss.XSSAPI;
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.PageManager;
Expand All @@ -36,27 +39,14 @@
import org.apache.sling.models.spi.DisposalCallbackRegistry;
import org.apache.sling.models.spi.Injector;
import org.osgi.framework.Constants;
import com.adobe.acs.commons.i18n.I18nProvider;
import com.adobe.acs.commons.models.injectors.annotation.AemObject;
import com.day.cq.i18n.I18n;

import javax.jcr.Session;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Type;
import java.util.Locale;

import static com.adobe.acs.commons.models.injectors.impl.InjectorUtils.getComponentContext;
import static com.adobe.acs.commons.models.injectors.impl.InjectorUtils.getCurrentDesign;
import static com.adobe.acs.commons.models.injectors.impl.InjectorUtils.getCurrentPage;
import static com.adobe.acs.commons.models.injectors.impl.InjectorUtils.getCurrentStyle;
import static com.adobe.acs.commons.models.injectors.impl.InjectorUtils.getDesigner;
import static com.adobe.acs.commons.models.injectors.impl.InjectorUtils.getPageManager;
import static com.adobe.acs.commons.models.injectors.impl.InjectorUtils.getResource;
import static com.adobe.acs.commons.models.injectors.impl.InjectorUtils.getResourceDesign;
import static com.adobe.acs.commons.models.injectors.impl.InjectorUtils.getResourcePage;
import static com.adobe.acs.commons.models.injectors.impl.InjectorUtils.getResourceResolver;
import static com.adobe.acs.commons.models.injectors.impl.InjectorUtils.getSession;
import static com.adobe.acs.commons.models.injectors.impl.InjectorUtils.getXssApi;
import static com.adobe.acs.commons.models.injectors.impl.InjectorUtils.*;
import static com.adobe.acs.commons.util.impl.ReflectionUtil.getClassOrGenericParam;

/**
Expand Down Expand Up @@ -129,8 +119,6 @@ public Object getValue(Object adaptable, String name, Type declaredType, Annotat
return getComponentContext(adaptable);
case PAGE_MANAGER:
return getPageManager(adaptable);
case TAG_MANAGER:
return getTagManager(adaptable);
case CURRENT_PAGE:
return getCurrentPage(adaptable);
case RESOURCE_PAGE:
Expand All @@ -149,19 +137,23 @@ public Object getValue(Object adaptable, String name, Type declaredType, Annotat
return resolveXssApi(adaptable);
case LOCALE:
return resolveLocale(adaptable);
case TAG_MANAGER:
return adaptFromResourceResolver(adaptable, TagManager.class);
case ASSET_MANAGER:
return adaptFromResourceResolver(adaptable, AssetManager.class);
case ASSET_MANAGER_OLD:
return adaptFromResourceResolver(adaptable, com.day.cq.dam.api.AssetManager.class);
case QUERY_BUILDER:
return adaptFromResourceResolver(adaptable, QueryBuilder.class);
case CONTENT_POLICY_MANAGER:
return adaptFromResourceResolver(adaptable,ContentPolicyManager.class);
case EXTERNALIZER:
return adaptFromResourceResolver(adaptable, Externalizer.class);
default:
return null;
}
}

private TagManager getTagManager(Object adaptable) {
final ResourceResolver resourceResolver = getResourceResolver(adaptable);

if(resourceResolver != null){
return resourceResolver.adaptTo(TagManager.class);
}
return null;
}

private Object resolveLocale(Object adaptable) {
final Page page = getResourcePage(adaptable);
Expand Down Expand Up @@ -204,6 +196,11 @@ private enum ObjectType {
SESSION,
LOCALE,
TAG_MANAGER,
QUERY_BUILDER,
CONTENT_POLICY_MANAGER,
ASSET_MANAGER,
ASSET_MANAGER_OLD,
EXTERNALIZER,
XSS_API;

private static final String RESOURCE_PAGE_STRING = "resourcePage";
Expand Down Expand Up @@ -235,6 +232,16 @@ public static ObjectType fromClassAndName(Class<?> classOrGenericParam, String n
return ObjectType.XSS_API;
} else if(classOrGenericParam.isAssignableFrom(Locale.class)){
return ObjectType.LOCALE;
} else if(classOrGenericParam.isAssignableFrom(AssetManager.class)){
return ObjectType.ASSET_MANAGER;
} else if(classOrGenericParam.isAssignableFrom(com.day.cq.dam.api.AssetManager.class)){
return ObjectType.ASSET_MANAGER_OLD;
} else if(classOrGenericParam.isAssignableFrom(QueryBuilder.class)){
return ObjectType.QUERY_BUILDER;
} else if(classOrGenericParam.isAssignableFrom(ContentPolicyManager.class)){
return ObjectType.CONTENT_POLICY_MANAGER;
} else if(classOrGenericParam.isAssignableFrom(Externalizer.class)){
return ObjectType.EXTERNALIZER;
}

return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,9 @@
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.scripting.SlingBindings;
import org.apache.sling.xss.XSSAPI;

import javax.jcr.Session;
import javax.servlet.ServletRequest;

/**
* Common methods for the injectors
Expand Down Expand Up @@ -81,6 +79,13 @@ public static ContentPolicy getContentPolicy(Object adaptable){
return null;
}

public static <T> T adaptFromResourceResolver(Object adaptable, Class<T> clazz){
ResourceResolver resourceResolver = getResourceResolver(adaptable);
if(resourceResolver != null){
return resourceResolver.adaptTo(clazz);
}
return null;
}
public static ResourceResolver getResourceResolver(Object adaptable) {
if (adaptable instanceof SlingHttpServletRequest) {
return ((SlingHttpServletRequest) adaptable).getResourceResolver();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,11 @@ protected boolean accepts(final ServletRequest servletRequest,
return false;
}

// Do not apply when exporting / updating experience fragments to Adobe Target
if (StringUtils.contains(slingRequest.getQueryString(), "wcmmode=disabled")) {
return false;
}

return super.accepts(servletRequest, servletResponse);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
/*-
* #%L
* ACS AEM Commons Bundle
* %%
* Copyright (C) 2013 - 2024 Adobe
* %%
* Licensed 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.
* #L%
*/
package com.adobe.acs.commons.indesign.dynamicdeckdynamo.services.impl;

import com.adobe.acs.commons.indesign.dynamicdeckdynamo.exception.DynamicDeckDynamoException;
import com.adobe.acs.commons.indesign.dynamicdeckdynamo.services.DynamicDeckConfigurationService;
import com.adobe.acs.commons.indesign.dynamicdeckdynamo.services.XMLGeneratorService;
import io.wcm.testing.mock.aem.junit5.AemContext;
import io.wcm.testing.mock.aem.junit5.AemContextExtension;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.event.jobs.JobManager;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;

import java.util.Collections;
import java.util.List;

import static org.junit.Assert.assertThrows;

@ExtendWith({AemContextExtension.class, MockitoExtension.class})
class DynamicDeckServiceImplTest {

private final AemContext context = new AemContext();

private ResourceResolver resourceResolver;

@Mock
private DynamicDeckConfigurationService configurationService;

@Mock
private XMLGeneratorService xmlGeneratorService;

@Mock
private JobManager jobManager;

@InjectMocks
private DynamicDeckServiceImpl dynamicDeckService;

@BeforeEach
void setUp() {
context.load().json("/com/adobe/acs/commons/dynamicdeckdynamo/dynamicdeckResources.json", "/content");
resourceResolver = context.resourceResolver();

context.registerService(DynamicDeckConfigurationService.class, configurationService);
context.registerService(XMLGeneratorService.class, xmlGeneratorService);
context.registerService(JobManager.class, jobManager);
dynamicDeckService = context.registerInjectActivateService(new DynamicDeckServiceImpl());
}

@Test
void shouldThrowExceptionInCaseOfTemplateAbsents() {
context.request().setPathInfo("/content/some/en/en/some.json");
List<Resource> assetResourceList = Collections.singletonList(Mockito.mock(Resource.class));
Resource masterAssetResource = resourceResolver.getResource("/content/dam/dynamic-deck-dynamo/master-assets");
Resource templateFolderResource = resourceResolver.getResource("/content/dam/dynamic-deck-dynamo/templates/simple-template-2018");
Resource destinationFolderResource = resourceResolver.getResource("/content/dam/dynamic-deck-dynamo/destination");

assertThrows(DynamicDeckDynamoException.class, () ->
dynamicDeckService.createDeck("deckTitle", masterAssetResource, assetResourceList, templateFolderResource,
destinationFolderResource, resourceResolver));
}

@Test
void shouldThrowExceptionInCaseOfDamAssetResourceNull() {
context.request().setPathInfo("/content/some/en/en/some.json");
List<Resource> assetResourceList = Collections.singletonList(Mockito.mock(Resource.class));
Resource masterAssetResource = resourceResolver.getResource("/content/dam/dynamic-deck-dynamo/master-assets");
Resource templateFolderResource = resourceResolver.getResource("/content/dam/dynamic-deck-dynamo/templates/simple-template-2019");
Resource destinationFolderResource = resourceResolver.getResource("/content/dam/dynamic-deck-dynamo/destination");

assertThrows(DynamicDeckDynamoException.class, () ->
dynamicDeckService.createDeck("deckTitle", masterAssetResource, assetResourceList, templateFolderResource,
destinationFolderResource, resourceResolver));
}
}
Loading

0 comments on commit 897d92b

Please sign in to comment.