Advertisement
Guest User

Untitled

a guest
Feb 27th, 2020
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.76 KB | None | 0 0
  1. package training.core.jobs;
  2.  
  3. import java.io.IOException;
  4. import java.net.URL;
  5. import java.util.Collections;
  6. import java.util.Map;
  7. import java.util.function.Consumer;
  8.  
  9. import javax.jcr.Node;
  10. import javax.jcr.RepositoryException;
  11. import javax.jcr.Session;
  12.  
  13. import org.apache.commons.lang3.StringUtils;
  14. import org.apache.jackrabbit.commons.JcrUtils;
  15. import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
  16. import org.apache.sling.api.resource.LoginException;
  17. import org.apache.sling.api.resource.ResourceResolver;
  18. import org.apache.sling.api.resource.ResourceResolverFactory;
  19. import org.slf4j.Logger;
  20. import org.slf4j.LoggerFactory;
  21.  
  22. import com.fasterxml.jackson.databind.ObjectMapper;
  23.  
  24. import training.core.beans.CategoriesBean;
  25. import training.core.beans.CategoryBean;
  26.  
  27. public class ProductCategoriesImportJob implements Runnable
  28. {
  29. private static final Logger LOGGER = LoggerFactory.getLogger(ProductCategoriesImportJob.class);
  30. private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
  31. private static final String ROOT_PATH = "/content/hybris/categories";
  32.  
  33. private ResourceResolverFactory resourceResolverFactory;
  34.  
  35. public ProductCategoriesImportJob(final ResourceResolverFactory resourceResolverFactory)
  36. {
  37. this.resourceResolverFactory = resourceResolverFactory;
  38. }
  39.  
  40. @Override
  41. public void run()
  42. {
  43. LOGGER.info("... Job ProductCategoriesImport is running ...");
  44. try
  45. {
  46. final ResourceResolver resourceResolver = this.resourceResolverFactory.getServiceResourceResolver(getAutheticationInfo());
  47. final CategoriesBean categoriesBean = fetchCategories();
  48. if (categoriesBean != null && !categoriesBean.getCategories().isEmpty())
  49. {
  50. final Session session = resourceResolver.adaptTo(Session.class);
  51. final Node rootNode = getNodeFromPath(ROOT_PATH, session);
  52. if(rootNode != null){
  53. categoriesBean.getCategories().forEach(setCategoryNode(session));
  54. session.save();
  55. }
  56. }
  57. }
  58. catch (LoginException e)
  59. {
  60. LOGGER.info("Problem with authetication", e);
  61. }
  62. catch (IOException e)
  63. {
  64. LOGGER.info("Problem with getting data from external system", e);
  65. }
  66. catch (RepositoryException e)
  67. {
  68. LOGGER.info("Problem with getting root node", e);
  69. }
  70. }
  71.  
  72. private Consumer<CategoryBean> setCategoryNode(final Session session)
  73. {
  74. return categoryBean -> {
  75. try
  76. {
  77. final String categoryPath = StringUtils.join(ROOT_PATH, "/", categoryBean.getName());
  78. Node categoryNode = getNodeFromPath(categoryPath, session);
  79. categoryNode.setProperty("title", categoryBean.getTitle());
  80. categoryNode.setProperty("description", categoryBean.getDescription());
  81. }
  82. catch (RepositoryException e)
  83. {
  84. LOGGER.info("Problem with getting category node", e);
  85. }
  86. };
  87. }
  88.  
  89. private CategoriesBean fetchCategories() throws java.io.IOException
  90. {
  91. return OBJECT_MAPPER.readValue(new URL("https://ibm.box.com/shared/static/ir9sbjgx7xgts991je91kxb4wtp1bufo.json"), CategoriesBean.class);
  92. }
  93.  
  94. private Map<String, Object> getAutheticationInfo()
  95. {
  96. return Collections.singletonMap(ResourceResolverFactory.SUBSERVICE, "training-service2");
  97. }
  98.  
  99. private Node getNodeFromPath(final String path, final Session session) throws RepositoryException
  100. {
  101. return JcrUtils.getOrCreateByPath(path, NodeTypeConstants.NT_UNSTRUCTURED, session);
  102. }
  103.  
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement