ResourceManagerImpl.java
4.42 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
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* com.adobe.granite.rest.RequestException
* com.adobe.granite.rest.ResourceManager
* com.adobe.granite.rest.RestException
* javax.jcr.Node
* javax.jcr.RepositoryException
* javax.jcr.Session
* javax.jcr.Workspace
* javax.jcr.query.Query
* javax.jcr.query.QueryManager
* javax.jcr.query.QueryResult
* javax.jcr.query.Row
* javax.jcr.query.RowIterator
* org.apache.sling.api.resource.Resource
* org.apache.sling.api.resource.ResourceResolver
* org.slf4j.Logger
* org.slf4j.LoggerFactory
*/
package com.adobe.cq.rest.content.impl;
import com.adobe.cq.rest.content.impl.PageQueryTransformer;
import com.adobe.cq.rest.content.impl.PageResource;
import com.adobe.cq.rest.content.impl.PageResourceProviderFactory;
import com.adobe.granite.rest.RequestException;
import com.adobe.granite.rest.ResourceManager;
import com.adobe.granite.rest.RestException;
import java.util.LinkedList;
import java.util.List;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Workspace;
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
import javax.jcr.query.QueryResult;
import javax.jcr.query.Row;
import javax.jcr.query.RowIterator;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ResourceManagerImpl
implements ResourceManager {
private Logger logger;
private PageQueryTransformer queryTransformer;
private PageResourceProviderFactory apiResourceProviderFactory;
public ResourceManagerImpl(PageResourceProviderFactory apiResourceProviderFactory) {
this.logger = LoggerFactory.getLogger(this.getClass());
this.queryTransformer = new PageQueryTransformer();
this.apiResourceProviderFactory = apiResourceProviderFactory;
}
public boolean copy(Resource resource, String destinationUri, int depth) throws UnsupportedOperationException, RequestException, RestException {
throw new UnsupportedOperationException("Copy is not supported for this Resource");
}
public boolean move(Resource resource, String destinationUri) throws UnsupportedOperationException, RequestException, RestException {
throw new UnsupportedOperationException("Move is not supported for this Resource");
}
public List<Resource> find(Resource resource, String query) throws UnsupportedOperationException, RequestException, RestException {
this.logger.debug("finding resources for query={}", (Object)query);
if (!(resource instanceof PageResource)) {
throw new IllegalArgumentException("Resource is not a PageResource");
}
if (!query.toLowerCase().startsWith("select ")) {
query = "SELECT * FROM page WHERE CONTAINS(page.*, '" + query.replaceAll("'", "''") + "')";
}
ResourceResolver resolver = resource.getResourceResolver();
LinkedList<Resource> results = new LinkedList<Resource>();
String transformedQuery = this.queryTransformer.transform(resource, query);
this.logger.debug("Transformed query {} to {}", (Object)query, (Object)transformedQuery);
if (transformedQuery != null) {
String apiContextPath = resource.getPath().replaceFirst("^(/.*?/.*?)(/.*)", "$1");
try {
Session session = (Session)resolver.adaptTo(Session.class);
QueryManager queryMgr = session.getWorkspace().getQueryManager();
Query jcrQuery = queryMgr.createQuery(transformedQuery, "JCR-SQL2");
QueryResult queryResults = jcrQuery.execute();
String selector = this.queryTransformer.getSelectorName(resource, query);
RowIterator it = queryResults.getRows();
while (it.hasNext()) {
Row row = it.nextRow();
Node node = row.getNode(selector);
String path = this.apiResourceProviderFactory.map(apiContextPath, node.getPath());
Resource result = resolver.getResource(path);
if (result == null || !(result instanceof PageResource)) continue;
results.add(result);
}
}
catch (RepositoryException e) {
throw new RestException(e.getMessage(), (Throwable)e);
}
}
return results;
}
}