Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v.3.9.0 release #1219

Merged
merged 10 commits into from
Jan 24, 2025
3 changes: 2 additions & 1 deletion .github/workflows/snapshot-deploy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ jobs:
MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}

- name: Upload CodeCov
uses: codecov/codecov-action@v4
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
flags: unittests
3 changes: 2 additions & 1 deletion .github/workflows/verify.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ jobs:
run: mvn -U clean verify -Pcloud,jacoco-report

- name: Upload CodeCov
uses: codecov/codecov-action@v4
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
flags: unittests
2 changes: 1 addition & 1 deletion all/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
<parent>
<groupId>com.adobe.aem.commons</groupId>
<artifactId>assetshare</artifactId>
<version>3.8.23-SNAPSHOT</version>
<version>3.9.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion core.cloud/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
<parent>
<groupId>com.adobe.aem.commons</groupId>
<artifactId>assetshare</artifactId>
<version>3.8.23-SNAPSHOT</version>
<version>3.9.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
<parent>
<groupId>com.adobe.aem.commons</groupId>
<artifactId>assetshare</artifactId>
<version>3.8.23-SNAPSHOT</version>
<version>3.9.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 +67,16 @@
import org.slf4j.LoggerFactory;

import javax.jcr.RepositoryException;
import javax.jcr.Value;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

import org.apache.http.client.utils.URIBuilder;

@Component(service = ShareService.class)
@Designate(ocd = EmailShareServiceImpl.Cfg.class)
public class EmailShareServiceImpl implements ShareService {
Expand All @@ -90,6 +92,10 @@ public class EmailShareServiceImpl implements ShareService {
private static final String EMAIL_ADDRESSES = "email";
private static final String EMAIL_ASSET_LINK_LIST_HTML = "assetLinksHTML";

/* Share properties */
private static final String PN_TRACKING_NAME = "trackingName";
private static final String PN_TRACKING_VALUE = "trackingValue";

private transient Cfg cfg;
private transient BundleContext bundleContext;

Expand Down Expand Up @@ -206,14 +212,29 @@ private final String getAssetLinkListHtml(final Config config, final String[] as

// Unescape the URL since externalizer also escapes, resulting in a breaking, double-escaped URLs
// This is required since assetDetailsResolver.getFullUrl(config, asset) performs its own escaping.
url = Text.unescape(url);
url = Text.unescape(url);

if (RequireAem.ServiceType.AUTHOR.equals(requireAem.getServiceType())) {
url = externalizer.authorLink(config.getResourceResolver(), url);
} else {
url = externalizer.externalLink(config.getResourceResolver(), cfg.externalizerDomain(), url);
}

String trackingName = config.getProperties().get(PN_TRACKING_NAME, String.class);
String trackingValue = config.getProperties().get(PN_TRACKING_VALUE, String.class);

try {
if (!StringUtils.isAnyBlank(trackingName, trackingValue)) {
URIBuilder uriBuilder = new URIBuilder(url);
uriBuilder.setParameter(trackingName, trackingValue);
url = uriBuilder.build().toString();
}
} catch (URISyntaxException e) {
if (log.isWarnEnabled()) {
log.warn("Unable to part [ {} ] to a valid URL for use in a share e-mail.", url);
}
}

sb.append("<li><a href=\"");
sb.append(url);
sb.append("\">");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,19 +37,18 @@
import javax.inject.Named;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;

public abstract class AbstractPredicate implements Predicate {
private static final Logger log = LoggerFactory.getLogger(AbstractPredicate.class);

public static final String REQUEST_ATTR_PREDICATE_GROUP_TRACKER = "asset-share-commons__predicate-group";
public static final String REQUEST_ATTR_LEGACY_PREDICATE_GROUP_TRACKER = "asset-share-commons__legacy_predicate-group";
public static final String REQUEST_ATTR_LEGACY_PREDICATE_GROUP_TRACKER = "DEPRECATED_DO_NOT_USE__asset-share-commons__legacy_predicate-group";

private static final String REQUEST_ATTR_FORM_ID_TRACKER = "asset-share-commons__form-id";
private static final String PN_GENERATE_PREDICATE_GROUP_ID = "generatePredicateGroupId";

private static final Integer INITIAL_GROUP_ID = 0;
private static final Integer INITIAL_LEGACY_GROUP_ID = 10000 - 1;

@Self
@Required
private SlingHttpServletRequest request;
Expand Down Expand Up @@ -89,9 +88,19 @@ public boolean isAutoSearch() {
}

public String getGroup() {
Map<String, Integer> groupTracker = getGroupTracker(this.request);
String path = this.request.getResource().getPath();

if (groupTracker.get(path) != null) {
group = groupTracker.get(path);
} else {
group = this.request.getResource().getPath().hashCode();
}

return group + "_group";
}


public String getInitialValue() {
return null;
}
Expand Down Expand Up @@ -169,8 +178,12 @@ protected final void initPredicate(final SlingHttpServletRequest request, final
protected synchronized final void initGroup(final SlingHttpServletRequest request) {
/* Track Predicate Groups across Request */

if (!isGroupIdGeneratingComponent(request) || !isReady() || !generateGroupId(request)) {
/*if (!isGroupIdGeneratingComponent(request) || !isReady() || !generateGroupId(request)) {
generateLegacyGroupId(request);
}*/

if (isGroupIdGeneratingComponent(request)) {
generateGroupId(request);
}
}

Expand All @@ -190,39 +203,29 @@ private boolean isGroupIdGeneratingComponent(SlingHttpServletRequest request) {
* @return true if a group id was generated.
*/
private boolean generateGroupId(SlingHttpServletRequest request) {
Object groupTracker = request.getAttribute(REQUEST_ATTR_PREDICATE_GROUP_TRACKER);

if (groupTracker == null) {
groupTracker = INITIAL_GROUP_ID;
}
HashMap<String, Integer> groupTracker = getGroupTracker(request);

if (groupTracker instanceof Integer) {
group = (Integer) groupTracker + 1;
request.setAttribute(REQUEST_ATTR_PREDICATE_GROUP_TRACKER, group);
if (groupTracker.containsKey(request.getResource().getPath())) {
this.group = groupTracker.getOrDefault(request.getResource().getPath(), request.getResource().getPath().hashCode());
// Processed
return false;
} else {
group = groupTracker.values().stream().max(Integer::compare).orElse(-1) + 1;
groupTracker.put(request.getResource().getPath(), group);
request.setAttribute(REQUEST_ATTR_PREDICATE_GROUP_TRACKER, groupTracker);
request.setAttribute("TEST", "I WWAS SET IN GENERATE GROUP ID");
return true;
}

return false;
}

/**
* Set the legacy groupId and set the request attribute.
*
* @param request the Sling Http Request object.
*/
private void generateLegacyGroupId(SlingHttpServletRequest request) {
Object legacyGroupTracker = request.getAttribute(REQUEST_ATTR_LEGACY_PREDICATE_GROUP_TRACKER);

if (legacyGroupTracker == null) {
legacyGroupTracker = INITIAL_LEGACY_GROUP_ID;
private HashMap<String, Integer> getGroupTracker(SlingHttpServletRequest request) {
HashMap<String, Integer> groupTracker = (HashMap) request.getAttribute(REQUEST_ATTR_PREDICATE_GROUP_TRACKER);
if (groupTracker == null) {
groupTracker = new HashMap<>();
}

if (legacyGroupTracker instanceof Integer) {
group = (Integer) legacyGroupTracker + 1;
request.setAttribute(REQUEST_ATTR_LEGACY_PREDICATE_GROUP_TRACKER, group);
} else {
group = -1;
}
return groupTracker;
}

public class AlphabeticalOptionItems implements Comparator<OptionItem> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,9 @@ enum ParamTypes {
LIMIT,
HIDDEN_PREDICATES,
SEARCH_PREDICATES,
ORDERBY;
ORDERBY,
INDEX_TAG,
FACET_STRATEGY
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,14 @@ public String getGuessTotal() {
return searchConfig.getGuessTotal();
}

public String getIndexTag() {
return searchConfig.getIndexTag();
}

public String getFacetStrategy() {
return searchConfig.getFacetStrategy();
}

public List<String> getPaths() {
return searchConfig.getPaths();
}
Expand Down Expand Up @@ -230,11 +238,41 @@ public PredicateGroup getPredicateGroup(ParamTypes... excludeParamTypes) {
addGuessTotalAsParameterPredicate(parameterGroup);
}

// p.indexTag
if (!ArrayUtils.contains(excludeParamTypes, ParamTypes.INDEX_TAG)) {
addIndexTagAsParameterPredicate(parameterGroup);
}

// p.facetStrategy
if (!ArrayUtils.contains(excludeParamTypes, ParamTypes.FACET_STRATEGY)) {
addFacetStrategyAsParameterPredicate(parameterGroup);
}


root.add(parameterGroup);

return root;
}

private void addIndexTagAsParameterPredicate(final PredicateGroup parameterGroup) {
String indexTag = getIndexTag();
if (StringUtils.isBlank(indexTag)) { return; }

parameterGroup.addAll(PredicateConverter.createPredicates(ImmutableMap.<String, String>builder().
put(Predicate.PARAM_OPTIONS_INDEXTAG, indexTag).
build()));
}

private void addFacetStrategyAsParameterPredicate(final PredicateGroup parameterGroup) {
String facetStrategy = getFacetStrategy();
if (StringUtils.isBlank(facetStrategy)) { return; }

parameterGroup.addAll(PredicateConverter.createPredicates(ImmutableMap.<String, String>builder().
put(Predicate.PARAM_FACET_STRATEGY, facetStrategy).
build()));
}


private void addGuessTotalAsParameterPredicate(final PredicateGroup parameterGroup) {
parameterGroup.addAll(PredicateConverter.createPredicates(ImmutableMap.<String, String>builder().
put(Predicate.PARAM_GUESS_TOTAL, getGuessTotal()).
Expand Down Expand Up @@ -274,20 +312,16 @@ private void addHiddenPredicatesAsPredicateGroups(final PredicateGroup root) {
private void addDefaultValuesAsPredicateGroups(final PredicateGroup root) {
// Capture any existing values, however these should be null
Object predicateGroupTracker = request.getAttribute(AbstractPredicate.REQUEST_ATTR_PREDICATE_GROUP_TRACKER);
Object legacyPredicateGroupTracker = request.getAttribute(AbstractPredicate.REQUEST_ATTR_LEGACY_PREDICATE_GROUP_TRACKER);

// Reset group tracking, as any instantiation of a predicate will increment the group
request.setAttribute(AbstractPredicate.REQUEST_ATTR_PREDICATE_GROUP_TRACKER, null);
request.setAttribute(AbstractPredicate.REQUEST_ATTR_LEGACY_PREDICATE_GROUP_TRACKER, null);

for (final DefaultValuesPredicate defaultValuesPredicate : getDefaultValuesPredicates(currentPage)) {
root.add(defaultValuesPredicate.getPredicateGroup());
}

// Set back any existing values, though these should be null
request.setAttribute(AbstractPredicate.REQUEST_ATTR_PREDICATE_GROUP_TRACKER, predicateGroupTracker);
request.setAttribute(AbstractPredicate.REQUEST_ATTR_LEGACY_PREDICATE_GROUP_TRACKER, legacyPredicateGroupTracker);

}

private void addPathAsPredicateGroup(final PredicateGroup root) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
*
*/

@Version("4.2.0")
@Version("4.3.0")
package com.adobe.aem.commons.assetshare.components.predicates;

import org.osgi.annotation.versioning.Version;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,18 @@ public interface SearchConfig {
*/
String getGuessTotal();

/**
*
* @return the index tag hint, or null if none is set
*/
default String getIndexTag() { return null; };

/**
*
* @return the facet strategy, or null if none is set
*/
default String getFacetStrategy() { return null; }

/**
* @return the default
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ public class SearchConfigImpl implements SearchConfig, ComponentExporter {
private String PN_GUESS_TOTAL = Predicate.PARAM_GUESS_TOTAL;
private String PN_SPID = "searchProviderId";
private String PN_SEARCH_PREDICATES = "searchPredicates";
private String PN_INDEX_TAG = "indexTag";
private String PN_FACET_STRATEGY = "facetStrategy";

@Self
private SlingHttpServletRequest request;
Expand Down Expand Up @@ -148,6 +150,26 @@ public boolean isOrderByCase() {
return properties.get(PN_ORDER_BY_CASE, DEFAULT_ORDER_BY_CASE);
}

@Override
public String getIndexTag() {
String indexTag = properties.get(PN_INDEX_TAG, String.class);
if (StringUtils.isBlank(indexTag)) {
return null;
} else {
return indexTag;
}
}

@Override
public String getFacetStrategy() {
String facetStrategy = properties.get(PN_FACET_STRATEGY, String.class);
if (StringUtils.isBlank(facetStrategy)) {
return null;
} else {
return facetStrategy;
}
}

@Override
public List<String> getPaths() {
final List<String> paths = Arrays.stream(properties.get(PN_PATHS, DEFAULT_PATHS)).filter(path ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
*
*/

@Version("2.1.1")
@Version("2.2.0")
package com.adobe.aem.commons.assetshare.components.search;

import org.osgi.annotation.versioning.Version;
Expand Down
Loading
Loading