Programmatically generating a JcrPackage.

Programmatically generating a JcrPackage.

Initially, we need to obtain the session object which is required for creating a JcrPackage.

Note: I'm leveraging the sub-service serviceUserName, which already incorporates a system user configuration.

Map<String, Object> serviceUser = new HashMap<>();
serviceUser.put(ResourceResolverFactory.SUBSERVICE, "serviceUserName");
ResourceResolver resourceResolver =              resolverFactory.getServiceResourceResolver(serviceUser);
Session session? = resourceResolver.adaptTo(Session.class);         

Instantiate a JcrPackageManager.

JcrPackageManager jpm = PackagingService.getPackageManager(session);        

Using the JcrPackageManager object reference, create a JcrPackage, and then instantiate a JcrPackageDefinition using the JcrPackage reference.

The JcrPackageDefinition is utilized to define filters.

Eg: jpm.create("text-packages", "create-dynamic-package", "0.0.1");

JcrPackage pack = jpm.create("package-group-name", "package-name", "package-version");
JcrPackageDefinition definition = pack.getDefinition();        

Using below code it adds the filters to the JcrPackage.

Note: We need to create PathFilterSet object reference for each filter.

DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
PathFilterSet pathFilterSet = new PathFilterSet();
pathFilterSet.setRoot("/content/we-retail/us/en/home");
filter.add(pathFilterSet);         

Once all filters are added we need to set those to the definition

definition.setFilter(filter, true);        

Need to create ProgresstrackeListener reference which will be used for building the jcrPackage

ProgressTrackerListener listener = new DefaultProgressListener();        

assemble method will build the JcrPackage with all the filters added to it.

jpm.assemble(pack,listener);        

Interface Class:

package com.core.service


public interface JcrPackageCreation {
	
	public String createJcrPackage();
}         

Implementation Class:

package com.core.impl
import java.util.HashMap;
import java.util.Map;
import javax.jcr.Session;
import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
import org.apache.jackrabbit.vault.fs.api.ProgressTrackerListener;
import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
import org.apache.jackrabbit.vault.packaging.JcrPackage;
import org.apache.jackrabbit.vault.packaging.JcrPackageDefinition;
import org.apache.jackrabbit.vault.packaging.JcrPackageManager;
import org.apache.jackrabbit.vault.packaging.PackagingService;
import org.apache.jackrabbit.vault.util.DefaultProgressListener;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import com.test.core.service.JcrPackageCreation;

@Component(service = JcrPackageCreation.class)
public class BaseJcrPackageCreation implements JcrPackageCreation {
 @Reference
 private ResourceResolverFactory resolverFactory;
 @Override
 public String createJcrPackage() {
 ResourceResolver resourceResolver = null;
 Session session = null;
 JcrPackage pack = null;
 try {			
  Map<String, Object> param = new HashMap<>();
  param.put(ResourceResolverFactory.SUBSERVICE, "testService");
  resourceResolver = resolverFactory.getServiceResourceResolver(param);
  session? = resourceResolver.adaptTo(Session.class);
  JcrPackageManager jpm = PackagingService.getPackageManager(session);
  pack = jpm.create("test-packages", "test-dynamic-package", "0.0.1");
  JcrPackageDefinition definition = pack.getDefinition();
  DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
  PathFilterSet pathFilterSet = new PathFilterSet();		      
  pathFilterSet.setRoot("/content/test/us/en/home/devspace");
  filter.add(pathFilterSet);
  boolean autoSave = true;
  if(definition != null)
    definition.setFilter(filter, autoSave);
    ProgressTrackerListener listener = new DefaultProgressListener();
    jpm.assemble(pack,listener);		? ??
} catch (Exception e) 
{
  // Exception Logger
} finally 
{
  if(pack!= null)
     pack.close();
  if(session != null)
    session.logout();
}
 return "Jcrpackage Created Successfully!";
  }
}        


要查看或添加评论,请登录

社区洞察

其他会员也浏览了