Custom Live Action does not execute on Rollout page and all sub pages | Community
Skip to main content
Alex_Goulet
Level 2
May 31, 2018
Solved

Custom Live Action does not execute on Rollout page and all sub pages

  • May 31, 2018
  • 3 replies
  • 1552 views

Hi,

I've developed a custom live action that executes on Rollout Page but not on Rollout page and all sub pages .

In the code below, VersionNodesLiveAction.execute does not fire on Rollout page and all sub pages, but it does on Rollout Page.

Is there something I'm missing?

package com.test;

import com.day.cq.wcm.api.WCMException;

import com.day.cq.wcm.msm.api.ActionConfig;

import com.day.cq.wcm.msm.api.LiveAction;

import com.day.cq.wcm.msm.api.LiveActionFactory;

import com.day.cq.wcm.msm.api.LiveRelationship;

import com.sonova.support.core.service.component.VersionNodesByPath;

import com.sonova.support.core.utils.SonovaUtils;

import org.apache.felix.scr.annotations.*;

import org.apache.sling.api.resource.Resource;

import org.apache.sling.api.resource.ResourceResolver;

import org.apache.sling.api.resource.ValueMap;

import org.apache.sling.api.wrappers.ValueMapDecorator;

import org.apache.sling.commons.json.JSONException;

import org.apache.sling.commons.json.io.JSONWriter;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import javax.jcr.Node;

import javax.jcr.RepositoryException;

import java.util.Collections;

import java.util.Map;

/**

* Creates actions for each node being rolled out.

*

*/

@Component(metatype = false)

@Service

public class VersionNodesLiveActionFactory implements LiveActionFactory<LiveAction> {

   @Property(value = "versionNodesLiveAction")

   static final String actionname = LiveActionFactory.LIVE_ACTION_NAME;

   private static final Logger log = LoggerFactory.getLogger(VersionNodesLiveActionFactory.class);

   public LiveAction createAction(Resource config) {

   ValueMap configs;

   /* Adapt the config resource to a ValueMap */

   if (config == null || config.adaptTo(ValueMap.class) == null) {

   configs = new ValueMapDecorator(Collections.<String, Object>emptyMap());

   } else {

   log.debug(config.getName());

   log.debug(config.getPath());

  configs = config.adaptTo(ValueMap.class);

   }

   return new VersionNodesLiveAction(actionname, configs);

   }

   public String createsAction() {

   return actionname;

   }

   @Activate

   public void activate(final Map<String, Object> config) throws RepositoryException {

   log.debug("VersionNodesLiveActionFactory: activate");

   }

   @Deactivate

   public void deactivate(final Map<String, String> config) throws RepositoryException {

   log.debug("VersionNodesLiveActionFactory: deactivate");

   }

   /************* LiveAction ****************/

   public static class VersionNodesLiveAction implements LiveAction {

   private static final Logger log = LoggerFactory.getLogger(VersionNodesLiveAction.class);

   private String name;

   private ValueMap configs;

   public VersionNodesLiveAction(String nm, ValueMap config) {

   name = nm;

   configs = config;

   }

   public void execute(Resource source, Resource target,

   LiveRelationship liverel, boolean autoSave, boolean isResetRollout)

   throws WCMException {

   log.debug("VersionNodesLiveAction: execute");

   if (source == null)

   log.debug(source.getName());

   if (source == null || !source.getName().endsWith("jcr:content")) {

   return;

   }

   if (source.adaptTo(Node.class) != null) {

   log.debug(source.getPath());

   VersionNodesByPath vnbp = SonovaUtils.getService(VersionNodesByPath.class);

  vnbp.autoVersion(source.getPath());

   }

  }

   public String getName() {

   return name;

   }

   /************* Deprecated *************/

   @Deprecated

   public void execute(ResourceResolver arg0, LiveRelationship arg1,

   ActionConfig arg2, boolean arg3) throws WCMException {

   log.debug("VersionNodesLiveAction: execute1");

   }

   @Deprecated

   public void execute(ResourceResolver arg0, LiveRelationship arg1,

   ActionConfig arg2, boolean arg3, boolean arg4)

   throws WCMException {

   log.debug("VersionNodesLiveAction: execute2");

   }

   @Deprecated

   public String getParameterName() {

   return null;

   }

   @Deprecated

   public String[] getPropertiesNames() {

   return null;

   }

   @Deprecated

   public int getRank() {

   return 0;

   }

   @Deprecated

   public String getTitle() {

   return null;

   }

   @Deprecated

   public void write(JSONWriter arg0) throws JSONException {

  }

   public void process(final String eventPath, final String type) {

   log.debug("VersionNodesLiveAction: process");

   }

  }

}

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by Gokul2011

Hi Alex,

We checked the AEM document you shared and we tried replicating the same functionality on our end and looks like the iteration not happening on child pages instead it is iterating the components listed within the parent page.

Instead try by invoking custom iteration on child pages to take versions. We understood its not ideal way but this can be alternate option for you.

We tired with existing VersionManager to take versions of pages .

VersionManager vm = session.getWorkspace().getVersionManager();   //Version manager using Session

  

   String parentPage = source.getPath().replace("/jcr:content", "");  //taking source path

  

   PageManager pageManager = resolver.adaptTo(PageManager.class);

   List<String>pageList = new ArrayList();

  

       pageList.add(parentPage);    //iterating Via Source path

    Page rootPage = pageManager.getPage(parentPage);

    Iterator<Page> rootPageIterator = rootPage.listChildren();

    while(rootPageIterator.hasNext())

    {

    Page childPage =    rootPageIterator.next();

    String path = childPage.getPath();

    vm.checkin(path);

    }

Not sure if this helps your need.

3 replies

smacdonald2008
Level 10
May 31, 2018

Please point the community to the doc topic where you got this code to see if it can be reproduced.

Alex_Goulet
Level 2
May 31, 2018
Gokul2011Accepted solution
Level 6
June 6, 2018

Hi Alex,

We checked the AEM document you shared and we tried replicating the same functionality on our end and looks like the iteration not happening on child pages instead it is iterating the components listed within the parent page.

Instead try by invoking custom iteration on child pages to take versions. We understood its not ideal way but this can be alternate option for you.

We tired with existing VersionManager to take versions of pages .

VersionManager vm = session.getWorkspace().getVersionManager();   //Version manager using Session

  

   String parentPage = source.getPath().replace("/jcr:content", "");  //taking source path

  

   PageManager pageManager = resolver.adaptTo(PageManager.class);

   List<String>pageList = new ArrayList();

  

       pageList.add(parentPage);    //iterating Via Source path

    Page rootPage = pageManager.getPage(parentPage);

    Iterator<Page> rootPageIterator = rootPage.listChildren();

    while(rootPageIterator.hasNext())

    {

    Page childPage =    rootPageIterator.next();

    String path = childPage.getPath();

    vm.checkin(path);

    }

Not sure if this helps your need.