Quantcast
Channel: Experiencing Adobe Experience Manager (AEM, CQ)
Viewing all articles
Browse latest Browse all 526

AEM 6420 - Add Sort by Name, Type in Assets List view, set Default Sort to Name

$
0
0

Goal


In all 3 views (Card, List, Column) of Assets UI, set Default Sort by column to Name. Configure the Name and Type columns to be sortable in List View

Demo | Source Code | Package Install | Github

Extension



List view Sort by Name




Solution


1) Login to CRXDe Lite, overlay the name and type nodes of /libs/dam/gui/content/commons/availablecolumns, set the property sortable=true

                                  /apps/dam/gui/content/commons/availablecolumns/name
                                  /apps/dam/gui/content/commons/availablecolumns/type

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
jcr:primaryType="nt:unstructured">
<name
jcr:primaryType="nt:unstructured"
jcr:title="Name"
configurable="{Boolean}false"
default="{Boolean}true"
sortable="{Boolean}true"/>
<type
jcr:primaryType="nt:unstructured"
jcr:title="Type"
columnGroup="metadata"
default="{Boolean}true"
sortable="{Boolean}true"/>
</jcr:root>


2) Create a Sling Filter to intercept request URIs starting with /mnt/overlay/dam/gui/content/assets/jcr:content/views, set the sort property to name if sortName parameter is empty (overriding the default orderby=@jcr:created with orderby=nodename). NameSortSlingServletRequestWrapper, a sling request wrapper in the filter returns name if sortName parameter value is empty

package apps.experienceaem.assets;

import org.apache.commons.lang3.StringUtils;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.*;
import java.io.IOException;

@Component(
metatype = true,
description = "Experience AEM Request filter for AssetsDataSourceServlet",
label = "EAEM Datasource Sort Filter")
@Service({Filter.class})
@Properties({
@Property(name = "sling.filter.scope",value = {"REQUEST"},propertyPrivate = true),
@Property( name = "sling.filter.pattern",
value = {"/mnt/overlay/dam/gui/content/assets/jcr:content/views/.*"},
propertyPrivate = true),
@Property(name = "service.ranking",intValue = {-99},propertyPrivate = true)})
public class EAEMAssetDataSourceFilter implements Filter {
private static Logger log = LoggerFactory.getLogger(EAEMAssetDataSourceFilter.class);

public static String SORT_NAME = "sortName";

public static String SORT_NAME_NAME = "name";


@Override
public void init(FilterConfig filterConfig) throws ServletException {
}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
SlingHttpServletRequest slingRequest = (SlingHttpServletRequest)request;

String orderBy = slingRequest.getParameter(SORT_NAME);

if(StringUtils.isNotEmpty(orderBy)){
chain.doFilter(request, response);
return;
}

SlingHttpServletRequest nameSortRequest = new NameSortSlingServletRequestWrapper(slingRequest);
chain.doFilter(nameSortRequest, response);
}

@Override
public void destroy() {
}

private class NameSortSlingServletRequestWrapper extends SlingHttpServletRequestWrapper {
public NameSortSlingServletRequestWrapper(final SlingHttpServletRequest request) {
super(request);
}

@Override
public String getParameter(String paramName) {
if(!EAEMAssetDataSourceFilter.SORT_NAME.equals(paramName)){
return super.getParameter(paramName);
}

return EAEMAssetDataSourceFilter.SORT_NAME_NAME;
}
}
}


Viewing all articles
Browse latest Browse all 526

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>