You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:58:20 UTC
[sling-org-apache-sling-repoinit-parser] 03/10: SLING-5842 - add
'register nodetypes' statement to repoinit parser
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag org.apache.sling.repoinit.parser-1.0.4
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-repoinit-parser.git
commit 4563ff6ea16b1b374fa2fc36576f1dbbdf1d3158
Author: Bertrand Delacretaz <bd...@apache.org>
AuthorDate: Mon Jul 18 15:08:18 2016 +0000
SLING-5842 - add 'register nodetypes' statement to repoinit parser
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/repoinit/parser@1753237 13f79535-47bb-0310-9956-ffa450edef68
---
.../parser/operations/OperationVisitor.java | 1 +
...perationVisitor.java => RegisterNodetypes.java} | 35 ++++++++++++++++-----
src/main/javacc/RepoInitGrammar.jjt | 36 ++++++++++++++++++++++
.../parser/test/OperationToStringVisitor.java | 6 ++++
src/test/resources/testcases/test-50-output.txt | 27 ++++++++++++++++
src/test/resources/testcases/test-50.txt | 31 +++++++++++++++++++
src/test/resources/testcases/test-99-output.txt | 8 +++++
src/test/resources/testcases/test-99.txt | 9 ++++++
8 files changed, 146 insertions(+), 7 deletions(-)
diff --git a/src/main/java/org/apache/sling/repoinit/parser/operations/OperationVisitor.java b/src/main/java/org/apache/sling/repoinit/parser/operations/OperationVisitor.java
index d7d2682..8693a99 100644
--- a/src/main/java/org/apache/sling/repoinit/parser/operations/OperationVisitor.java
+++ b/src/main/java/org/apache/sling/repoinit/parser/operations/OperationVisitor.java
@@ -24,4 +24,5 @@ public interface OperationVisitor {
void visitSetAclPaths(SetAclPaths s);
void visitCreatePath(CreatePath cp);
void visitRegisterNamespace(RegisterNamespace rn);
+ void visitRegisterNodetypes(RegisterNodetypes b);
}
diff --git a/src/main/java/org/apache/sling/repoinit/parser/operations/OperationVisitor.java b/src/main/java/org/apache/sling/repoinit/parser/operations/RegisterNodetypes.java
similarity index 53%
copy from src/main/java/org/apache/sling/repoinit/parser/operations/OperationVisitor.java
copy to src/main/java/org/apache/sling/repoinit/parser/operations/RegisterNodetypes.java
index d7d2682..3266900 100644
--- a/src/main/java/org/apache/sling/repoinit/parser/operations/OperationVisitor.java
+++ b/src/main/java/org/apache/sling/repoinit/parser/operations/RegisterNodetypes.java
@@ -17,11 +17,32 @@
package org.apache.sling.repoinit.parser.operations;
-public interface OperationVisitor {
- void visitCreateServiceUser(CreateServiceUser s);
- void visitDeleteServiceUser(DeleteServiceUser s);
- void visitSetAclPrincipal(SetAclPrincipals s);
- void visitSetAclPaths(SetAclPaths s);
- void visitCreatePath(CreatePath cp);
- void visitRegisterNamespace(RegisterNamespace rn);
+/** An embedded block of text */
+public class RegisterNodetypes extends Operation {
+ private final String cndStatements;
+
+ public RegisterNodetypes(String cndStatements) {
+ this.cndStatements = cndStatements;
+ }
+
+ @Override
+ public String toString() {
+ return getClass().getSimpleName() + ":\n" + getParametersDescription();
+ }
+
+ @Override
+ protected String getParametersDescription() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append(getCndStatements());
+ return sb.toString();
+ }
+
+ @Override
+ public void accept(OperationVisitor v) {
+ v.visitRegisterNodetypes(this);
+ }
+
+ public String getCndStatements() {
+ return cndStatements;
+ }
}
diff --git a/src/main/javacc/RepoInitGrammar.jjt b/src/main/javacc/RepoInitGrammar.jjt
index 1f887b5..f1191eb 100644
--- a/src/main/javacc/RepoInitGrammar.jjt
+++ b/src/main/javacc/RepoInitGrammar.jjt
@@ -69,6 +69,7 @@ TOKEN:
| < NODETYPES: "nodetypes" >
| < REGISTER: "register" >
| < NAMESPACE: "namespace" >
+| < START_TEXTBLOCK: "<<<===" > : TEXTBLOCK
| < LPAREN: "(" >
| < RPAREN: ")" >
| < COMMA: "," >
@@ -81,6 +82,17 @@ TOKEN:
| < EOL: "\n" >
}
+<TEXTBLOCK> SKIP :
+{
+ "\r"
+}
+
+<TEXTBLOCK> TOKEN :
+{
+ < TEXT : ~[] >
+| < END_TEXTBLOCK: "===>>>" > : DEFAULT
+}
+
List<Operation> parse() :
{}
{
@@ -92,6 +104,7 @@ List<Operation> parse() :
| setAclPrincipals(result)
| createPathStatement(result)
| registerNamespaceStatement(result)
+ | registerNodetypesStatement(result)
| blankLine()
) *
<EOF>
@@ -302,3 +315,26 @@ void registerNamespaceStatement(List<Operation> result) :
(<EOL> | <EOF>)
}
+
+void textBlock(StringBuilder b) :
+{
+ Token t;
+}
+{
+ <START_TEXTBLOCK>
+ ( t = <TEXT> { b.append(t.image); } )*
+ <END_TEXTBLOCK>
+}
+
+void registerNodetypesStatement(List<Operation> result) :
+{
+ StringBuilder b = new StringBuilder();
+}
+{
+ <REGISTER> <NODETYPES> <EOL>
+ textBlock(b)
+ (<EOL> | <EOF>)
+ {
+ result.add(new RegisterNodetypes(b.toString()));
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/org/apache/sling/repoinit/parser/test/OperationToStringVisitor.java b/src/test/java/org/apache/sling/repoinit/parser/test/OperationToStringVisitor.java
index a25128a..ede1c58 100644
--- a/src/test/java/org/apache/sling/repoinit/parser/test/OperationToStringVisitor.java
+++ b/src/test/java/org/apache/sling/repoinit/parser/test/OperationToStringVisitor.java
@@ -24,6 +24,7 @@ import org.apache.sling.repoinit.parser.operations.AclLine;
import org.apache.sling.repoinit.parser.operations.CreatePath;
import org.apache.sling.repoinit.parser.operations.CreateServiceUser;
import org.apache.sling.repoinit.parser.operations.DeleteServiceUser;
+import org.apache.sling.repoinit.parser.operations.RegisterNodetypes;
import org.apache.sling.repoinit.parser.operations.OperationVisitor;
import org.apache.sling.repoinit.parser.operations.RegisterNamespace;
import org.apache.sling.repoinit.parser.operations.SetAclPaths;
@@ -84,6 +85,11 @@ class OperationToStringVisitor implements OperationVisitor {
out.println(rn.toString());
}
+ @Override
+ public void visitRegisterNodetypes(RegisterNodetypes nt) {
+ out.println(nt.toString());
+ }
+
private void dumpAclLines(Collection<AclLine> c) {
for(AclLine line : c) {
out.print(" ");
diff --git a/src/test/resources/testcases/test-50-output.txt b/src/test/resources/testcases/test-50-output.txt
new file mode 100644
index 0000000..dfa1efd
--- /dev/null
+++ b/src/test/resources/testcases/test-50-output.txt
@@ -0,0 +1,27 @@
+RegisterNodetypes:
+
+ <slingevent='http://sling.apache.org/jcr/event/1.0'>
+ <nt='http://www.jcp.org/jcr/nt/1.0'>
+ <mix='http://www.jcp.org/jcr/mix/1.0'>
+
+ [slingevent:Event] > nt:unstructured, nt:hierarchyNode
+ - slingevent:topic (string)
+ - slingevent:application (string)
+ - slingevent:created (date)
+ - slingevent:properties (binary)
+
+ [slingevent:Job] > slingevent:Event, mix:lockable
+ - slingevent:processor (string)
+ - slingevent:id (string)
+ - slingevent:finished (date)
+
+ [slingevent:TimedEvent] > slingevent:Event, mix:lockable
+ - slingevent:processor (string)
+ - slingevent:id (string)
+ - slingevent:expression (string)
+ - slingevent:date (date)
+ - slingevent:period (long)
+
+RegisterNodetypes:
+
+Just one line, not indented
\ No newline at end of file
diff --git a/src/test/resources/testcases/test-50.txt b/src/test/resources/testcases/test-50.txt
new file mode 100644
index 0000000..230a071
--- /dev/null
+++ b/src/test/resources/testcases/test-50.txt
@@ -0,0 +1,31 @@
+# Test parsing embedded CNDs
+
+register nodetypes
+<<<===
+ <slingevent='http://sling.apache.org/jcr/event/1.0'>
+ <nt='http://www.jcp.org/jcr/nt/1.0'>
+ <mix='http://www.jcp.org/jcr/mix/1.0'>
+
+ [slingevent:Event] > nt:unstructured, nt:hierarchyNode
+ - slingevent:topic (string)
+ - slingevent:application (string)
+ - slingevent:created (date)
+ - slingevent:properties (binary)
+
+ [slingevent:Job] > slingevent:Event, mix:lockable
+ - slingevent:processor (string)
+ - slingevent:id (string)
+ - slingevent:finished (date)
+
+ [slingevent:TimedEvent] > slingevent:Event, mix:lockable
+ - slingevent:processor (string)
+ - slingevent:id (string)
+ - slingevent:expression (string)
+ - slingevent:date (date)
+ - slingevent:period (long)
+===>>>
+
+register nodetypes
+<<<===
+Just one line, not indented
+===>>>
diff --git a/src/test/resources/testcases/test-99-output.txt b/src/test/resources/testcases/test-99-output.txt
index fcbe63c..1fe2f1a 100644
--- a/src/test/resources/testcases/test-99-output.txt
+++ b/src/test/resources/testcases/test-99-output.txt
@@ -17,4 +17,12 @@ SetAclPrincipals for alice bob fred
AclLine DENY {paths=[/content/example.com], privileges=[jcr:write]}
AclLine DENY {nodetypes=[example:Page], paths=[/], privileges=[jcr:all]}
RegisterNamespace (NSprefix) uri:someURI/v1.42
+RegisterNodetypes:
+
+ <slingevent='http://sling.apache.org/jcr/event/1.0'>
+
+ [slingevent:Event] > nt:unstructured, nt:hierarchyNode
+ - slingevent:topic (string)
+ - slingevent:properties (binary)
+
CreateServiceUser the-last-one
\ No newline at end of file
diff --git a/src/test/resources/testcases/test-99.txt b/src/test/resources/testcases/test-99.txt
index 54927c4..a2f200a 100644
--- a/src/test/resources/testcases/test-99.txt
+++ b/src/test/resources/testcases/test-99.txt
@@ -33,4 +33,13 @@ end
register namespace ( NSprefix ) uri:someURI/v1.42
+register nodetypes
+<<<===
+ <slingevent='http://sling.apache.org/jcr/event/1.0'>
+
+ [slingevent:Event] > nt:unstructured, nt:hierarchyNode
+ - slingevent:topic (string)
+ - slingevent:properties (binary)
+===>>>
+
create service user the-last-one
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.