Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package training.core.jobs;
- import java.io.IOException;
- import java.net.URL;
- import java.util.Collections;
- import java.util.Map;
- import java.util.function.Consumer;
- import javax.jcr.Node;
- import javax.jcr.RepositoryException;
- import javax.jcr.Session;
- import org.apache.commons.lang3.StringUtils;
- import org.apache.jackrabbit.commons.JcrUtils;
- import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
- import org.apache.sling.api.resource.LoginException;
- import org.apache.sling.api.resource.ResourceResolver;
- import org.apache.sling.api.resource.ResourceResolverFactory;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import training.core.beans.CategoriesBean;
- import training.core.beans.CategoryBean;
- public class ProductCategoriesImportJob implements Runnable
- {
- private static final Logger LOGGER = LoggerFactory.getLogger(ProductCategoriesImportJob.class);
- private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
- private static final String ROOT_PATH = "/content/hybris/categories";
- private ResourceResolverFactory resourceResolverFactory;
- public ProductCategoriesImportJob(final ResourceResolverFactory resourceResolverFactory)
- {
- this.resourceResolverFactory = resourceResolverFactory;
- }
- @Override
- public void run()
- {
- LOGGER.info("... Job ProductCategoriesImport is running ...");
- try
- {
- final ResourceResolver resourceResolver = this.resourceResolverFactory.getServiceResourceResolver(getAutheticationInfo());
- final CategoriesBean categoriesBean = fetchCategories();
- if (categoriesBean != null && !categoriesBean.getCategories().isEmpty())
- {
- final Session session = resourceResolver.adaptTo(Session.class);
- final Node rootNode = getNodeFromPath(ROOT_PATH, session);
- if(rootNode != null){
- categoriesBean.getCategories().forEach(setCategoryNode(session));
- session.save();
- }
- }
- }
- catch (LoginException e)
- {
- LOGGER.info("Problem with authetication", e);
- }
- catch (IOException e)
- {
- LOGGER.info("Problem with getting data from external system", e);
- }
- catch (RepositoryException e)
- {
- LOGGER.info("Problem with getting root node", e);
- }
- }
- private Consumer<CategoryBean> setCategoryNode(final Session session)
- {
- return categoryBean -> {
- try
- {
- final String categoryPath = StringUtils.join(ROOT_PATH, "/", categoryBean.getName());
- Node categoryNode = getNodeFromPath(categoryPath, session);
- categoryNode.setProperty("title", categoryBean.getTitle());
- categoryNode.setProperty("description", categoryBean.getDescription());
- }
- catch (RepositoryException e)
- {
- LOGGER.info("Problem with getting category node", e);
- }
- };
- }
- private CategoriesBean fetchCategories() throws java.io.IOException
- {
- return OBJECT_MAPPER.readValue(new URL("https://ibm.box.com/shared/static/ir9sbjgx7xgts991je91kxb4wtp1bufo.json"), CategoriesBean.class);
- }
- private Map<String, Object> getAutheticationInfo()
- {
- return Collections.singletonMap(ResourceResolverFactory.SUBSERVICE, "training-service2");
- }
- private Node getNodeFromPath(final String path, final Session session) throws RepositoryException
- {
- return JcrUtils.getOrCreateByPath(path, NodeTypeConstants.NT_UNSTRUCTURED, session);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement