You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by dk...@apache.org on 2018/11/06 03:17:30 UTC
[sling-org-apache-sling-app-cms] 01/01: Working on improving the
references for SLING-8074
This is an automated email from the ASF dual-hosted git repository.
dklco pushed a commit to branch SLING-8074-improve-reference-list
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git
commit 4c03ef7d3d9ad3e12b48d2c1803bc3dde320619f
Author: Dan Klco <dk...@apache.org>
AuthorDate: Mon Nov 5 22:17:12 2018 -0500
Working on improving the references for SLING-8074
---
.../core/internal/models/ReferenceOperation.java | 103 +++++++++++----------
.../libs/sling-cms/content/shared/references.json | 17 ++++
.../libs/sling-cms/content/site/content.json | 7 ++
3 files changed, 77 insertions(+), 50 deletions(-)
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/models/ReferenceOperation.java b/core/src/main/java/org/apache/sling/cms/core/internal/models/ReferenceOperation.java
index baa05c5..311a8d1 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/models/ReferenceOperation.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/models/ReferenceOperation.java
@@ -33,61 +33,64 @@ import org.slf4j.LoggerFactory;
*/
public abstract class ReferenceOperation {
- private static final Logger log = LoggerFactory.getLogger(ReferenceOperation.class);
+ private static final Logger log = LoggerFactory.getLogger(ReferenceOperation.class);
- private Pattern regex = null;
+ private Pattern regex = null;
- private Resource resource = null;
+ private Resource resource = null;
- public ReferenceOperation(Resource resource) {
- String path = resource.getPath().replace("/", "\\/");
- if (CMSConstants.NT_PAGE.equals(resource.getResourceType())) {
- regex = Pattern.compile(
- "(^" + path + "($|\\/)|(\\'|\\\")" + path + "(\\.html|\\'|\\\"|\\/))");
- } else {
- regex = Pattern.compile("(^" + path + "($|\\/)|(\\'|\\\")" + path + "(\\'|\\\"|\\/))");
- }
- this.resource = resource;
- }
+ public ReferenceOperation(Resource resource) {
+ String path = resource.getPath().replace("/", "\\/");
+ if (CMSConstants.NT_PAGE.equals(resource.getResourceType())) {
+ regex = Pattern.compile("(^" + path + "($|\\/)|(\\'|\\\")" + path + "(\\.html|\\'|\\\"|\\/))");
+ } else {
+ regex = Pattern.compile("(^" + path + "($|\\/)|(\\'|\\\")" + path + "(\\'|\\\"|\\/))");
+ }
+ this.resource = resource;
+ }
- public void init() {
- log.debug("Finding references to {}", resource.getPath());
+ private void checkReferences(Resource resource) {
+ log.debug("Checking for references in resource {}", resource);
+ ValueMap properties = resource.getValueMap();
+ properties.keySet().forEach(k -> {
+ if (properties.get(k) instanceof String) {
+ if (matches(properties.get(k, String.class))) {
+ log.trace("Found reference in property {}@{}", resource.getPath(), k);
+ doProcess(resource, k);
+ }
+ } else if (properties.get(k) instanceof String[]) {
+ for (String v : properties.get(k, String[].class)) {
+ if (matches(v)) {
+ log.trace("Found reference in property {}@{}", resource.getPath(), k);
+ doProcess(resource, k);
+ break;
+ }
+ }
+ }
- String query = "SELECT * FROM [nt:base] AS s WHERE CONTAINS(s.*, '" + resource.getPath() + "')";
- Iterator<Resource> resources = resource.getResourceResolver().findResources(query, Query.JCR_SQL2);
- log.debug("Checking for references with: {}", query);
- while (resources.hasNext()) {
- Resource r = resources.next();
- log.debug("Checking for references in resource {}", r);
- ValueMap properties = r.getValueMap();
- for (String k : properties.keySet()) {
- if (properties.get(k) instanceof String) {
- Matcher matcher = regex.matcher(properties.get(k, String.class));
- if (matcher.find()) {
- log.trace("Found reference in property {}@{}", r.getPath(), k);
- doProcess(r, k);
- }
- } else if (properties.get(k) instanceof String[]) {
- boolean matches = false;
- for (String v : properties.get(k, String[].class)) {
- Matcher matcher = regex.matcher(v);
- if (matcher.find()) {
- matches = true;
- break;
- }
- }
- if (matches) {
- log.trace("Found reference in property {}@{}", r.getPath(), k);
- doProcess(r, k);
- }
- }
- }
- }
- }
+ });
+ }
- public abstract void doProcess(Resource resource, String matchingKey);
+ public abstract void doProcess(Resource resource, String matchingKey);
- public Pattern getRegex() {
- return regex;
- }
+ public Pattern getRegex() {
+ return regex;
+ }
+
+ public void init() {
+ log.debug("Finding references to {}", resource.getPath());
+ String query = "SELECT * FROM [nt:base] AS s WHERE NOT ISDESCENDANTNODE([/jcr:system/jcr:versionStorage]) AND CONTAINS(s.*, '"
+ + resource.getPath() + "')";
+ Iterator<Resource> resources = resource.getResourceResolver().findResources(query, Query.JCR_SQL2);
+ log.debug("Checking for references with: {}", query);
+ while (resources.hasNext()) {
+ Resource r = resources.next();
+ checkReferences(r);
+ }
+ }
+
+ private boolean matches(String value) {
+ Matcher matcher = regex.matcher(value);
+ return matcher.find();
+ }
}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/references.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/references.json
new file mode 100644
index 0000000..100d492
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/references.json
@@ -0,0 +1,17 @@
+{
+ "jcr:primaryType": "sling:Page",
+ "jcr:content": {
+ "sling:resourceType": "sling-cms/components/pages/modal",
+ "jcr:title": "View References",
+ "jcr:primaryType": "nt:unstructured",
+ "container": {
+ "jcr:primaryType": "nt:unstructured",
+ "sling:resourceType": "sling-cms/components/general/container",
+ "references": {
+ "jcr:primaryType": "nt:unstructured",
+ "sling:resourceType": "sling-cms/components/editor/fields/references",
+ "label": "References"
+ }
+ }
+ }
+}
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json
index f48b94c..eae063e 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/site/content.json
@@ -261,6 +261,13 @@
"icon": "move-alt",
"prefix": "/cms/shared/movecopy.html"
},
+ "references": {
+ "jcr:primaryType": "nt:unstructured",
+ "modal": true,
+ "title": "References",
+ "icon": "directions",
+ "prefix": "/cms/shared/references.html"
+ },
"version": {
"jcr:primaryType": "nt:unstructured",
"ajaxPath": ".versionmanager",