JcrProductInfoManagerImpl.java
4.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* com.adobe.cq.commerce.api.Product
* com.day.cq.commons.RangeIterator
* com.day.cq.search.Predicate
* com.day.cq.search.SimpleSearch
* com.day.cq.search.result.Hit
* com.day.cq.search.result.SearchResult
* com.day.cq.tagging.TagManager
* javax.jcr.Node
* javax.jcr.NodeIterator
* javax.jcr.Session
* javax.jcr.Workspace
* javax.jcr.query.Query
* javax.jcr.query.QueryManager
* javax.jcr.query.QueryResult
* org.apache.sling.api.resource.Resource
* org.apache.sling.api.resource.ResourceResolver
* org.slf4j.Logger
* org.slf4j.LoggerFactory
*/
package com.adobe.cq.commerce.pim.impl;
import com.adobe.cq.commerce.api.Product;
import com.adobe.cq.commerce.pim.api.ProductInfoManager;
import com.day.cq.commons.RangeIterator;
import com.day.cq.search.Predicate;
import com.day.cq.search.SimpleSearch;
import com.day.cq.search.result.Hit;
import com.day.cq.search.result.SearchResult;
import com.day.cq.tagging.TagManager;
import java.util.ArrayList;
import java.util.List;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Session;
import javax.jcr.Workspace;
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
import javax.jcr.query.QueryResult;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class JcrProductInfoManagerImpl
implements ProductInfoManager {
protected static final Logger log = LoggerFactory.getLogger(JcrProductInfoManagerImpl.class);
private final ResourceResolver resourceResolver;
private final TagManager tagManager;
private final Session session;
public JcrProductInfoManagerImpl(ResourceResolver resourceResolver) {
this.resourceResolver = resourceResolver;
this.tagManager = (TagManager)resourceResolver.adaptTo(TagManager.class);
this.session = (Session)resourceResolver.adaptTo(Session.class);
}
@Override
public List<Product> findProductsByTag(String basePath, String[] matchTags) {
RangeIterator results = this.tagManager.find(basePath, matchTags);
ArrayList<Product> products = new ArrayList<Product>();
while (results != null && results.hasNext()) {
Resource r = (Resource)results.next();
Product p = (Product)r.adaptTo(Product.class);
if (p == null) continue;
products.add(p);
}
return products;
}
@Override
public List<Product> findProductsBySearch(String basePath, String searchString) {
ArrayList<Product> products = new ArrayList<Product>();
Resource root = this.resourceResolver.getResource(basePath);
if (root == null) {
log.error("Product base path {} not found.", (Object)basePath);
return products;
}
try {
SimpleSearch search = (SimpleSearch)root.adaptTo(SimpleSearch.class);
if (search != null) {
search.setQuery(searchString);
search.setSearchIn(basePath);
search.setHitsPerPage(100000);
Predicate typePredicate = new Predicate("type", "type");
typePredicate.set("type", "nt:unstructured");
search.addPredicate(typePredicate);
SearchResult result = search.getResult();
if (result != null) {
for (Hit hit : result.getHits()) {
Product p = (Product)hit.getResource().adaptTo(Product.class);
if (p == null || p.getBaseProduct() != p) continue;
products.add(p);
}
}
}
}
catch (Exception e) {
log.error("Product data search failed", (Throwable)e);
}
return products;
}
@Override
public List<Product> findProductsByQuery(String queryType, String query) {
ArrayList<Product> products = new ArrayList<Product>();
try {
Query jcrQuery = this.session.getWorkspace().getQueryManager().createQuery(query, queryType);
NodeIterator iterator = jcrQuery.execute().getNodes();
while (iterator != null && iterator.hasNext()) {
Resource r = this.resourceResolver.getResource(iterator.nextNode().getPath());
Product p = (Product)r.adaptTo(Product.class);
if (p == null) continue;
products.add(p);
}
}
catch (Exception e) {
log.error("Product data search failed", (Throwable)e);
}
return products;
}
}