Goal
Filter or skip any renditions other than thumbnail.48.48.png from Activation. In addition to filtering renditions, restrict activation of properties with specific namespace eaem. A sample Replication Content Filter implementation for restrictive activation
Thank you Ravi Kiran for the suggestion
Demo | Package Install | Source Code
Image Node in Author CRX
Image Node in Publish CRX
Nodes renditions/cq5dam.thumbnail.319.319.png, renditions/cq5dam.thumbnail.140.100.png, renditions/original NOT activated
Property eaem:department NOT activated
Solution
1) Create a sample namespace eaem in Author CRX using the namespace editor (http://localhost:4502/crx/explorer/ui/namespace_editor.jsp). Check this post for more information on creating namespaces
package apps.experienceaem.repfilter;
import com.day.cq.replication.ReplicationAction;
import com.day.cq.replication.ReplicationActionType;
import com.day.cq.replication.ReplicationContentFilter;
import com.day.cq.replication.ReplicationContentFilterFactory;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.RepositoryException;
import java.util.List;
@Component
@Service
public class NodePropertyReplicationFilterFactory implements ReplicationContentFilterFactory {
    private static final Logger log = LoggerFactory.getLogger(NodePropertyReplicationFilterFactory.class);
    private static final ReplicationContentFilter FILTER = new NodePropertyReplicationContentFilter();
    /**
     * Filter executes on content activation
     *
     * @param action The {@link ReplicationAction} to consider.
     *
     * @return
     */
    public ReplicationContentFilter createFilter(final ReplicationAction action) {
        return action.getType() == ReplicationActionType.ACTIVATE ? FILTER : null;
    }
    /**
     * Filters out some renditions and properties from activation
     */
    private static class NodePropertyReplicationContentFilter implements ReplicationContentFilter {
        private static String ALLOWED_RENDITION = "thumbnail.48.48.png";
        private static String RESTRICTED_PREFIX = "eaem:";
        /**
         * Filter any renditions other than thumbnail.48.48.png while Activation
         *
         * @param node The {@link Node} to check.
         * @return
         */
        public boolean accepts(final Node node) {
            try {
                String parentName = node.getParent().getName();
                if (!parentName.equals("renditions")) {
                    return true;
                }
                String nodeName = node.getName();
                return nodeName.endsWith(ALLOWED_RENDITION);
            } catch (RepositoryException e) {
                log.error("Error with filtering ", e);
            }
            return true;
        }
        /**
         * Any property with prefix eaem: is not activated
         *
         * @param property The {@link Property} to check.
         * @return
         */
        public boolean accepts(final Property property) {
            try {
                String name = property.getName();
                return !name.startsWith(RESTRICTED_PREFIX);
            } catch (RepositoryException e) {
                log.error("Error with filtering ", e);
            }
            return true;
        }
        public boolean allowsDescent(final Node node) {
            return true;
        }
        public List<String> getFilteredPaths() {
            return null;
        }
    }
}


I really appreciate information shared above. It’s of great help. If someone want to learn Online (Virtual) instructor lead live training in Adobe Experience Manager
ReplyDelete, kindly contact us http://www.maxmunus.com/contact
MaxMunus Offer World Class Virtual Instructor led training on Adobe Experience Manager . We have industry expert trainer. We provide Training Material and Software Support. MaxMunus has successfully conducted 100000+ trainings in India, USA, UK, Australlia, Switzerland, Qatar, Saudi Arabia, Bangladesh, Bahrain and UAE etc.
For Demo Contact us:
Name : Arunkumar U
Email : arun@maxmunus.com
Skype id: training_maxmunus
Contact No.-+91-9738507310
Company Website –http://www.maxmunus.com