Skip to content

Commit

Permalink
Fix issue with Initial values (#1218)
Browse files Browse the repository at this point in the history
* Fixed issue with predicate group management
* Remove unused legacy predicate group tracking
  • Loading branch information
davidjgonzalez authored Jan 24, 2025
1 parent 3bb7ff8 commit e5c4d0e
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 34 deletions.
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 @@ -312,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

0 comments on commit e5c4d0e

Please sign in to comment.