From f4f894758f0b29760282c99a5ae0c8c62916f6aa Mon Sep 17 00:00:00 2001 From: Mark Daugherty Date: Tue, 19 Dec 2017 15:36:22 -0600 Subject: [PATCH 1/8] version. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 05571c92..f9ec2d0b 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ com.icfolson.aem.groovy.console aem-groovy-console jar - 11.3.0 + 11.3.1-SNAPSHOT AEM Groovy Console The AEM Groovy Console provides an interface for running Groovy scripts in the AEM container. Scripts can be From 5484f586d2c20def6eabe2c8616534015769bc99 Mon Sep 17 00:00:00 2001 From: Mark Daugherty Date: Wed, 14 Mar 2018 09:58:14 -0500 Subject: [PATCH 2/8] updated versions. --- pom.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index f9ec2d0b..3e507031 100644 --- a/pom.xml +++ b/pom.xml @@ -4,14 +4,14 @@ com.icfolson.aem aem-parent-uber-jar - 6.3.1.1 + 6.3.1.2 4.0.0 com.icfolson.aem.groovy.console aem-groovy-console jar - 11.3.1-SNAPSHOT + 12.0.0-SNAPSHOT AEM Groovy Console The AEM Groovy Console provides an interface for running Groovy scripts in the AEM container. Scripts can be @@ -124,7 +124,7 @@ maven-compiler-plugin - 3.5 + 3.7.0 groovy-eclipse-compiler 1.8 @@ -240,7 +240,7 @@ com.icfolson.maven.plugins aem-package-maven-plugin - 0.6.0 + 0.7.0 package @@ -261,7 +261,7 @@ com.icfolson.maven.plugins osgi-bundle-status-maven-plugin - 2.0.1 + 2.0.2 status-author @@ -403,7 +403,7 @@ com.icfolson.aem.groovy.extension aem-groovy-extension-bundle - 4.0.0 + 5.0.0-SNAPSHOT provided From 865d7b3e4ad3aaddbec82ddf8757e6f30a00dbb6 Mon Sep 17 00:00:00 2001 From: Mark Daugherty Date: Sat, 17 Mar 2018 12:28:41 -0500 Subject: [PATCH 3/8] refactored to use resource API for auditing. --- .../groovy/console/audit/AuditRecord.groovy | 15 +- .../groovy/console/audit/AuditService.groovy | 24 +-- .../audit/impl/DefaultAuditService.groovy | 190 ++++++++---------- .../aem/groovy/console/components/Body.groovy | 9 +- .../console/response/RunScriptResponse.groovy | 8 +- 5 files changed, 113 insertions(+), 133 deletions(-) diff --git a/src/main/groovy/com/icfolson/aem/groovy/console/audit/AuditRecord.groovy b/src/main/groovy/com/icfolson/aem/groovy/console/audit/AuditRecord.groovy index bba60519..514e5357 100644 --- a/src/main/groovy/com/icfolson/aem/groovy/console/audit/AuditRecord.groovy +++ b/src/main/groovy/com/icfolson/aem/groovy/console/audit/AuditRecord.groovy @@ -3,6 +3,7 @@ package com.icfolson.aem.groovy.console.audit import com.day.text.Text import com.icfolson.aem.groovy.console.response.RunScriptResponse import groovy.transform.ToString +import org.apache.sling.api.resource.Resource import javax.jcr.Node @@ -25,7 +26,7 @@ class AuditRecord { private static final Integer DEPTH_USER_ID = 5 - private Node node + private Resource resource @Delegate final RunScriptResponse response @@ -34,16 +35,16 @@ class AuditRecord { final Calendar date - AuditRecord(Node node) { - this.node = node + AuditRecord(Resource resource) { + this.resource = resource - path = node.path - date = node.getProperty(JCR_CREATED).date - response = RunScriptResponse.fromAuditRecordNode(node) + path = resource.path + date = resource.valueMap.get(JCR_CREATED, Calendar) + response = RunScriptResponse.fromAuditRecordResource(resource) } String getUserId() { - node.getAncestor(DEPTH_USER_ID).name + resource.adaptTo(Node).getAncestor(DEPTH_USER_ID).name } String getRelativePath() { diff --git a/src/main/groovy/com/icfolson/aem/groovy/console/audit/AuditService.groovy b/src/main/groovy/com/icfolson/aem/groovy/console/audit/AuditService.groovy index 6894fe29..b1230cdb 100644 --- a/src/main/groovy/com/icfolson/aem/groovy/console/audit/AuditService.groovy +++ b/src/main/groovy/com/icfolson/aem/groovy/console/audit/AuditService.groovy @@ -1,6 +1,7 @@ package com.icfolson.aem.groovy.console.audit import com.icfolson.aem.groovy.console.response.RunScriptResponse +import org.apache.sling.api.resource.PersistenceException import javax.jcr.RepositoryException import javax.jcr.Session @@ -13,35 +14,36 @@ interface AuditService { * @param session request session for the user executing the script * @param response response containing execution result or exception * @throws RepositoryException if error occurs creating audit record + * @throws PersistenceException if error occurs creating audit record */ - AuditRecord createAuditRecord(Session session, RunScriptResponse response) throws RepositoryException + AuditRecord createAuditRecord(Session session, + RunScriptResponse response) throws RepositoryException, PersistenceException /** * Delete all audit records. * * @param session request session, only audit records for the current user will be deleted - * @throws RepositoryException if an error occurs while deleting audit nodes + * @throws PersistenceException if an error occurs while deleting audit resources */ - void deleteAllAuditRecords(Session session) throws RepositoryException + void deleteAllAuditRecords(Session session) throws PersistenceException /** * Delete an audit record. * * @param session request session, only audit records for the current user will be deleted * @param userId user that owns the audit record - * @param relativePath relative path to audit record from parent audit node - * @throws RepositoryException if an error occurs while deleting the audit record node + * @param relativePath relative path to audit record from parent audit resource + * @throws PersistenceException if an error occurs while deleting the audit record resource */ - void deleteAuditRecord(Session session, String userId, String relativePath) throws RepositoryException + void deleteAuditRecord(Session session, String userId, String relativePath) throws PersistenceException /** * Get all audit records. * * @param session request session, only audit records for the current user will be retrieved * @return all audit records - * @throws RepositoryException if error occurs getting audit records */ - List getAllAuditRecords(Session session) throws RepositoryException + List getAllAuditRecords(Session session) /** * Get the audit record at the given relative path. @@ -50,9 +52,8 @@ interface AuditService { * @param userId user that owns the audit record * @param relativePath relative path to audit record from parent audit node * @return audit record or null if none exists - * @throws RepositoryException if error occurs getting audit record */ - AuditRecord getAuditRecord(Session session, String userId, String relativePath) throws RepositoryException + AuditRecord getAuditRecord(Session session, String userId, String relativePath) /** * Get a list of audit records for the given date range. @@ -61,7 +62,6 @@ interface AuditService { * @param startDate start date * @param endDate end date * @return list of audit records in the given date range - * @throws RepositoryException if error occurs getting audit records */ - List getAuditRecords(Session session, Calendar startDate, Calendar endDate) throws RepositoryException + List getAuditRecords(Session session, Calendar startDate, Calendar endDate) } diff --git a/src/main/groovy/com/icfolson/aem/groovy/console/audit/impl/DefaultAuditService.groovy b/src/main/groovy/com/icfolson/aem/groovy/console/audit/impl/DefaultAuditService.groovy index 1a12fd41..c70c28d2 100644 --- a/src/main/groovy/com/icfolson/aem/groovy/console/audit/impl/DefaultAuditService.groovy +++ b/src/main/groovy/com/icfolson/aem/groovy/console/audit/impl/DefaultAuditService.groovy @@ -12,7 +12,9 @@ import org.apache.felix.scr.annotations.Component import org.apache.felix.scr.annotations.Deactivate import org.apache.felix.scr.annotations.Reference import org.apache.felix.scr.annotations.Service -import org.apache.sling.jcr.api.SlingRepository +import org.apache.sling.api.resource.PersistenceException +import org.apache.sling.api.resource.ResourceResolver +import org.apache.sling.api.resource.ResourceResolverFactory import javax.jcr.Node import javax.jcr.RepositoryException @@ -38,48 +40,33 @@ class DefaultAuditService implements AuditService { private static final String DATE_FORMAT_DAY = "dd" @Reference - private SlingRepository repository + private ResourceResolverFactory resourceResolverFactory @Reference private ConfigurationService configurationService - private Session adminSession + private ResourceResolver resourceResolver @Override - AuditRecord createAuditRecord(Session session, RunScriptResponse response) throws RepositoryException { + AuditRecord createAuditRecord(Session session, RunScriptResponse response) + throws RepositoryException, PersistenceException { def auditRecord try { - adminSession.refresh(false) + resourceResolver.refresh() def auditRecordNode = addAuditRecordNode(session) - auditRecordNode.setProperty(AuditRecord.PROPERTY_SCRIPT, response.script) + setAuditRecordNodeProperties(auditRecordNode, response) - if (response.data) { - auditRecordNode.setProperty(AuditRecord.PROPERTY_DATA, response.data) - } - - if (response.exceptionStackTrace) { - auditRecordNode.setProperty(AuditRecord.PROPERTY_EXCEPTION_STACK_TRACE, response.exceptionStackTrace) - } else { - if (response.result) { - auditRecordNode.setProperty(AuditRecord.PROPERTY_RESULT, response.result) - } - - if (response.output) { - auditRecordNode.setProperty(AuditRecord.PROPERTY_OUTPUT, response.output) - } - - auditRecordNode.setProperty(AuditRecord.PROPERTY_RUNNING_TIME, response.runningTime) - } + resourceResolver.commit() - adminSession.save() + def auditRecordResource = resourceResolver.getResource(auditRecordNode.path) - auditRecord = new AuditRecord(auditRecordNode) + auditRecord = new AuditRecord(auditRecordResource) LOG.debug("created audit record = {}", auditRecord) - } catch (RepositoryException e) { + } catch (RepositoryException | PersistenceException e) { LOG.error("error creating audit record", e) throw e @@ -89,20 +76,24 @@ class DefaultAuditService implements AuditService { } @Override - void deleteAllAuditRecords(Session session) throws RepositoryException { + void deleteAllAuditRecords(Session session) throws PersistenceException { try { - adminSession.refresh(false) + resourceResolver.refresh() def auditNodePath = getAuditNodePath(session) - if (adminSession.nodeExists(auditNodePath)) { - adminSession.getNode(auditNodePath).nodes*.remove() + def auditResource = resourceResolver.getResource(auditNodePath) - LOG.debug("deleted all audit record nodes for path = {}", auditNodePath) + if (auditResource) { + auditResource.listChildren().each { resource -> + resourceResolver.delete(resource) + } + + LOG.debug("deleted all audit record resources for path = {}", auditNodePath) - adminSession.save() + resourceResolver.commit() } - } catch (RepositoryException e) { + } catch (PersistenceException e) { LOG.error("error deleting audit records", e) throw e @@ -110,15 +101,18 @@ class DefaultAuditService implements AuditService { } @Override - void deleteAuditRecord(Session session, String userId, String relativePath) throws RepositoryException { + void deleteAuditRecord(Session session, String userId, String relativePath) throws PersistenceException { try { - adminSession.refresh(false) - adminSession.getNode("$AUDIT_PATH/$userId").getNode(relativePath).remove() + resourceResolver.refresh() + + def auditRecordResource = resourceResolver.getResource("$AUDIT_PATH/$userId/$relativePath") + + resourceResolver.delete(auditRecordResource) LOG.debug("deleted audit record for user = {} at relative path = {}", userId, relativePath) - adminSession.save() - } catch (RepositoryException e) { + resourceResolver.commit() + } catch (PersistenceException e) { LOG.error("error deleting audit record", e) throw e @@ -126,92 +120,57 @@ class DefaultAuditService implements AuditService { } @Override - List getAllAuditRecords(Session session) throws RepositoryException { - def auditRecords = [] - - try { - adminSession.refresh(false) - - def auditNodePath = getAuditNodePath(session) + List getAllAuditRecords(Session session) { + resourceResolver.refresh() - auditRecords.addAll(findAllAuditRecords(auditNodePath)) - } catch (RepositoryException e) { - LOG.error("error getting audit records", e) + def auditNodePath = getAuditNodePath(session) - throw e - } - - auditRecords + findAllAuditRecords(auditNodePath) } @Override - AuditRecord getAuditRecord(Session session, String userId, String relativePath) throws RepositoryException { - def auditRecord = null - - try { - adminSession.refresh(false) + AuditRecord getAuditRecord(Session session, String userId, String relativePath) { + resourceResolver.refresh() - def auditNode = adminSession.getNode("$AUDIT_PATH/$userId") + def auditRecordResource = resourceResolver.getResource("$AUDIT_PATH/$userId").getChild(relativePath) - if (auditNode.hasNode(relativePath)) { - def auditRecordNode = auditNode.getNode(relativePath) - - auditRecord = new AuditRecord(auditRecordNode) + def auditRecord = null - LOG.debug("found audit record = {}", auditRecord) - } - } catch (RepositoryException e) { - LOG.error("error getting audit record", e) + if (auditRecordResource) { + auditRecord = new AuditRecord(auditRecordResource) - throw e + LOG.debug("found audit record = {}", auditRecord) } auditRecord } @Override - List getAuditRecords(Session session, Calendar startDate, - Calendar endDate) throws RepositoryException { - def auditRecords - - try { - adminSession.refresh(false) - - def auditNodePath = getAuditNodePath(session) - - def visitor = new AuditRecordNodeVisitor() - - visitor.visit(adminSession.getNode(auditNodePath)) + List getAuditRecords(Session session, Calendar startDate, Calendar endDate) { + resourceResolver.refresh() - auditRecords = visitor.auditRecords.findAll { auditRecord -> - def auditRecordDate = auditRecord.date + getAllAuditRecords(session).findAll { auditRecord -> + def auditRecordDate = auditRecord.date - auditRecordDate.set(Calendar.HOUR_OF_DAY, 0) - auditRecordDate.set(Calendar.MINUTE, 0) - auditRecordDate.set(Calendar.SECOND, 0) - auditRecordDate.set(Calendar.MILLISECOND, 0) + auditRecordDate.set(Calendar.HOUR_OF_DAY, 0) + auditRecordDate.set(Calendar.MINUTE, 0) + auditRecordDate.set(Calendar.SECOND, 0) + auditRecordDate.set(Calendar.MILLISECOND, 0) - !auditRecordDate.before(startDate) && !auditRecordDate.after(endDate) - } - } catch (RepositoryException e) { - LOG.error("error getting audit records for date range", e) - - throw e + !auditRecordDate.before(startDate) && !auditRecordDate.after(endDate) } - - auditRecords } @Activate void activate() { - adminSession = repository.loginService(null, null) + resourceResolver = resourceResolverFactory.getServiceResourceResolver(null) checkAuditNode() } @Deactivate void deactivate() { - adminSession?.logout() + resourceResolver?.close() } @Synchronized @@ -221,6 +180,8 @@ class DefaultAuditService implements AuditService { def month = date.format(DATE_FORMAT_MONTH) def day = date.format(DATE_FORMAT_DAY) + def adminSession = resourceResolver.adaptTo(Session) + def auditRecordParentNode = JcrUtil.createPath("$AUDIT_PATH/${session.userID}/$year/$month/$day", NT_UNSTRUCTURED, adminSession) def auditRecordNode = JcrUtil.createUniqueNode(auditRecordParentNode, AUDIT_RECORD_NODE_PREFIX, NT_UNSTRUCTURED, @@ -232,14 +193,37 @@ class DefaultAuditService implements AuditService { } private void checkAuditNode() { - def contentNode = adminSession.getNode(PATH_CONSOLE_ROOT).getNode(JCR_CONTENT) + def session = resourceResolver.adaptTo(Session) + def contentNode = session.getNode(PATH_CONSOLE_ROOT).getNode(JCR_CONTENT) if (!contentNode.hasNode(AUDIT_NODE_NAME)) { LOG.info("audit node does not exist, adding") contentNode.addNode(AUDIT_NODE_NAME) - adminSession.save() + session.save() + } + } + + private void setAuditRecordNodeProperties(Node auditRecordNode, RunScriptResponse response) { + auditRecordNode.setProperty(AuditRecord.PROPERTY_SCRIPT, response.script) + + if (response.data) { + auditRecordNode.setProperty(AuditRecord.PROPERTY_DATA, response.data) + } + + if (response.exceptionStackTrace) { + auditRecordNode.setProperty(AuditRecord.PROPERTY_EXCEPTION_STACK_TRACE, response.exceptionStackTrace) + } else { + if (response.result) { + auditRecordNode.setProperty(AuditRecord.PROPERTY_RESULT, response.result) + } + + if (response.output) { + auditRecordNode.setProperty(AuditRecord.PROPERTY_OUTPUT, response.output) + } + + auditRecordNode.setProperty(AuditRecord.PROPERTY_RUNNING_TIME, response.runningTime) } } @@ -250,12 +234,16 @@ class DefaultAuditService implements AuditService { private List findAllAuditRecords(String auditNodePath) { def auditRecords = [] - if (adminSession.nodeExists(auditNodePath)) { - def visitor = new AuditRecordNodeVisitor() + def auditResource = resourceResolver.getResource(auditNodePath) - visitor.visit(adminSession.getNode(auditNodePath)) + if (auditResource) { + auditResource.listChildren().each { resource -> + if (resource.name.startsWith(AUDIT_RECORD_NODE_PREFIX)) { + auditRecords.add(new AuditRecord(resource)) + } - auditRecords.addAll(visitor.auditRecords) + auditRecords.addAll(findAllAuditRecords(resource.path)) + } } auditRecords diff --git a/src/main/groovy/com/icfolson/aem/groovy/console/components/Body.groovy b/src/main/groovy/com/icfolson/aem/groovy/console/components/Body.groovy index 0fa609bf..ed998943 100644 --- a/src/main/groovy/com/icfolson/aem/groovy/console/components/Body.groovy +++ b/src/main/groovy/com/icfolson/aem/groovy/console/components/Body.groovy @@ -3,20 +3,17 @@ package com.icfolson.aem.groovy.console.components import com.icfolson.aem.groovy.console.audit.AuditRecord import com.icfolson.aem.groovy.console.audit.AuditService import groovy.json.JsonBuilder -import groovy.util.logging.Slf4j import org.apache.sling.api.SlingHttpServletRequest import org.apache.sling.models.annotations.Model import javax.annotation.PostConstruct import javax.inject.Inject -import javax.jcr.RepositoryException import javax.jcr.Session import static com.icfolson.aem.groovy.console.constants.GroovyConsoleConstants.PARAMETER_SCRIPT import static com.icfolson.aem.groovy.console.constants.GroovyConsoleConstants.PARAMETER_USER_ID @Model(adaptables = SlingHttpServletRequest) -@Slf4j("LOG") class Body { @Inject @@ -35,11 +32,7 @@ class Body { if (script) { def session = request.resourceResolver.adaptTo(Session) - try { - auditRecord = auditService.getAuditRecord(session, userId, script) - } catch (RepositoryException e) { - LOG.error("audit record not found for user ID = {} and script = {}", userId, script) - } + auditRecord = auditService.getAuditRecord(session, userId, script) } } diff --git a/src/main/groovy/com/icfolson/aem/groovy/console/response/RunScriptResponse.groovy b/src/main/groovy/com/icfolson/aem/groovy/console/response/RunScriptResponse.groovy index 337bf11b..ee274753 100644 --- a/src/main/groovy/com/icfolson/aem/groovy/console/response/RunScriptResponse.groovy +++ b/src/main/groovy/com/icfolson/aem/groovy/console/response/RunScriptResponse.groovy @@ -5,9 +5,7 @@ import com.icfolson.aem.groovy.console.table.Table import groovy.json.JsonBuilder import groovy.transform.Immutable import org.apache.commons.lang3.exception.ExceptionUtils -import org.apache.sling.jcr.resource.JcrPropertyMap - -import javax.jcr.Node +import org.apache.sling.api.resource.Resource import static com.icfolson.aem.groovy.console.audit.AuditRecord.PROPERTY_DATA import static com.icfolson.aem.groovy.console.audit.AuditRecord.PROPERTY_EXCEPTION_STACK_TRACE @@ -34,8 +32,8 @@ class RunScriptResponse { new RunScriptResponse(script, "", "", "", exceptionStackTrace, "") } - static RunScriptResponse fromAuditRecordNode(Node node) { - def properties = new JcrPropertyMap(node) + static RunScriptResponse fromAuditRecordResource(Resource resource) { + def properties = resource.valueMap def script = properties.get(PROPERTY_SCRIPT, "") def data = properties.get(PROPERTY_DATA, "") From 4b82f57219c72f9d8344ecdb0ba1c228d95a8dcc Mon Sep 17 00:00:00 2001 From: Mark Daugherty Date: Sat, 17 Mar 2018 12:46:52 -0500 Subject: [PATCH 4/8] readme updates for 6.4 beta. --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index d35db9e2..346355e2 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,8 @@ The AEM Groovy Console provides an interface for running [Groovy](http://www.gro ## Compatibility +**AEM 6.4 Beta users**: the latest development version (`12.0.0-SNAPSHOT`) is compatible with AEM 6.4. You will need to clone this repository and build with Maven to install (see [Building From Source](#building-from-source)). The Groovy Console will have a proper downloadable release when the non-beta AEM 6.4 if officially released. + Groovy Console Version(s) | AEM Version ------------ | ------------- 11.x.x | 6.3 @@ -34,6 +36,12 @@ Additional build profiles may be added in the project's `pom.xml` to support dep AEM 6.0 no longer allows vanity paths for pages in `/etc` by default. To enable access to the Groovy Console from `/groovyconsole` as in previous versions, the **Apache Sling Resource Resolver Factory** OSGi configuration must be updated to allow vanity paths from `/etc`. The **Groovy Console Configuration Service** can then be updated to enable the vanity path if so desired. +## Building From Source + +To build and install the latest development version of the Groovy Console (or if you've made source modifications), run the following Maven command. + + mvn install -P local + ## Excluding the Groovy OSGi Bundle If your AEM instance has multiple applications using Groovy and the `groovy-all` bundle is already deployed, you can exclude this bundle from the Groovy Console package build with the `exclude-groovy-bundle` Maven profile. This should prevent issues with conflicting Groovy versions at runtime. From ad0210868424900acf6e839101ce12ee702214f1 Mon Sep 17 00:00:00 2001 From: Mark Daugherty Date: Sat, 17 Mar 2018 12:47:45 -0500 Subject: [PATCH 5/8] typo fix. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 346355e2..39682caf 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ The AEM Groovy Console provides an interface for running [Groovy](http://www.gro ## Compatibility -**AEM 6.4 Beta users**: the latest development version (`12.0.0-SNAPSHOT`) is compatible with AEM 6.4. You will need to clone this repository and build with Maven to install (see [Building From Source](#building-from-source)). The Groovy Console will have a proper downloadable release when the non-beta AEM 6.4 if officially released. +**AEM 6.4 Beta users**: the latest development version (`12.0.0-SNAPSHOT`) is compatible with AEM 6.4. You will need to clone this repository and build with Maven to install (see [Building From Source](#building-from-source)). The Groovy Console will have a proper downloadable release when the non-beta AEM 6.4 is officially released. Groovy Console Version(s) | AEM Version ------------ | ------------- From 7264c5c9326d46fabc597447d07085c1b0ec98be Mon Sep 17 00:00:00 2001 From: Mark Daugherty Date: Thu, 14 Jun 2018 10:37:26 -0400 Subject: [PATCH 6/8] removed outdated method reference. --- .../jcr_root/apps/groovyconsole/components/console/methods.html | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/content/jcr_root/apps/groovyconsole/components/console/methods.html b/src/main/content/jcr_root/apps/groovyconsole/components/console/methods.html index 138699a2..b04558fe 100755 --- a/src/main/content/jcr_root/apps/groovyconsole/components/console/methods.html +++ b/src/main/content/jcr_root/apps/groovyconsole/components/console/methods.html @@ -23,7 +23,6 @@

  • activate(String path, ReplicationOptions options) - Activate the node at the given path with supplied options.
  • deactivate(String path) - Deactivate the node at the given path.
  • deactivate(String path, ReplicationOptions options) - Deactivate the node at the given path with supplied options.
  • -
  • doWhileDisabled(String componentClassName, Closure closure) - Execute the provided closure while the specified OSGi component is disabled.
  • createQuery(Map predicates) - Create a Query instance from the QueryBuilder for the current JCR session.
  • From 81f45837da90bc567616c8d5d6df3b99ac2526a9 Mon Sep 17 00:00:00 2001 From: Mark Daugherty Date: Thu, 14 Jun 2018 10:42:19 -0400 Subject: [PATCH 7/8] version. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3e507031..cf17674e 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ com.icfolson.aem.groovy.console aem-groovy-console jar - 12.0.0-SNAPSHOT + 12.0.0 AEM Groovy Console The AEM Groovy Console provides an interface for running Groovy scripts in the AEM container. Scripts can be From 486e75dee9c8454078707c63382a96adfcdd6d2d Mon Sep 17 00:00:00 2001 From: Mark Daugherty Date: Thu, 14 Jun 2018 14:02:36 -0400 Subject: [PATCH 8/8] updated javadoc links. --- .../groovyconsole/components/console/bindings.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/content/jcr_root/apps/groovyconsole/components/console/bindings.html b/src/main/content/jcr_root/apps/groovyconsole/components/console/bindings.html index 2bfd1d68..30079a3f 100644 --- a/src/main/content/jcr_root/apps/groovyconsole/components/console/bindings.html +++ b/src/main/content/jcr_root/apps/groovyconsole/components/console/bindings.html @@ -8,11 +8,11 @@

    The binding variables listed below are available for use in all scripts.