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

AEM 6460 - Force open a specific metadata schema while editing assets in bulk

$
0
0

Goal


While bulk editing assets (eg. by selecting random assets in search results) if the usecase is to force load a specific schema, try the following sling filter...

In the following example, opening metadata editor http://localhost:4502/mnt/overlay/dam/gui/content/assets/metadataeditor.external.html by selecting multiple assets always shows the schema experience-aem-schema

Solution


Create a Sling filter with the following code....

package com.experienceaem.assets;

import org.apache.commons.lang3.ArrayUtils;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.request.RequestParameter;
import org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper;
import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;

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

@Component(
service = Filter.class,
immediate = true,
name = "Force the metadata schema editor to load Experience AEM Schema",
property = {
Constants.SERVICE_RANKING + ":Integer=-99",
"sling.filter.scope=COMPONENT",
"sling.filter.pattern=^(\\/mnt\\/overlay\\/dam\\/gui\\/content\\/assets\\/metadataeditor).*$"
}
)
public class ForceMetadataSchemaFilter implements Filter {

private final String FORCED_FORM_TYPE_NAME = "forcedFormTypeName";

private final String EXPERIENCE_AEM_SCHEMA = "/experience-aem-schema";

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

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
chain.doFilter(new MetadataSchemaRequestWrapper((SlingHttpServletRequest) request), response);
}

@Override
public void destroy() {
}

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

@Override
public RequestParameter getRequestParameter(String paramName) {
RequestParameter requestParam = super.getRequestParameter(paramName);

if(!FORCED_FORM_TYPE_NAME.equals(paramName)){
return requestParam;
}

String[] content = (String[])super.getAttribute("aem.assets.ui.properties.content");

if(ArrayUtils.isEmpty(content) || (content.length == 1)){
return requestParam;
}

requestParam = new RequestParameter() {
@Override
public String getName() {
return FORCED_FORM_TYPE_NAME;
}

@Override
public boolean isFormField() {
return true;
}

@Override
public String getContentType() {
return null;
}

@Override
public long getSize() {
return 0;
}

@Override
public byte[] get() {
return new byte[0];
}

@Override
public InputStream getInputStream() throws IOException {
return null;
}

@Override
public String getFileName() {
return null;
}

@Override
public String getString() {
return EXPERIENCE_AEM_SCHEMA;
}

@Override
public String getString(String s) throws UnsupportedEncodingException {
return EXPERIENCE_AEM_SCHEMA;
}

@Override
public String toString() {
return EXPERIENCE_AEM_SCHEMA;
}
};

return requestParam;
}
}
}


Viewing all articles
Browse latest Browse all 525

Trending Articles



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