You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2017/01/16 10:44:57 UTC
svn commit: r1779004 - in
/sling/trunk/bundles/extensions/repoinit/parser/src:
main/java/org/apache/sling/repoinit/parser/operations/ main/javacc/
test/java/org/apache/sling/repoinit/parser/test/ test/resources/testcases/
Author: bdelacretaz
Date: Mon Jan 16 10:44:56 2017
New Revision: 1779004
URL: http://svn.apache.org/viewvc?rev=1779004&view=rev
Log:
SLING-6423 - support ACLOptions in repoinit parser - contributed by Nitin Nizhawan, thanks!
Added:
sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-12-output.txt
sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-12.txt
sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-31-output.txt
sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-31.txt
Modified:
sling/trunk/bundles/extensions/repoinit/parser/src/main/java/org/apache/sling/repoinit/parser/operations/AclGroupBase.java
sling/trunk/bundles/extensions/repoinit/parser/src/main/java/org/apache/sling/repoinit/parser/operations/SetAclPaths.java
sling/trunk/bundles/extensions/repoinit/parser/src/main/java/org/apache/sling/repoinit/parser/operations/SetAclPrincipals.java
sling/trunk/bundles/extensions/repoinit/parser/src/main/javacc/RepoInitGrammar.jjt
sling/trunk/bundles/extensions/repoinit/parser/src/test/java/org/apache/sling/repoinit/parser/test/OperationToStringVisitor.java
Modified: sling/trunk/bundles/extensions/repoinit/parser/src/main/java/org/apache/sling/repoinit/parser/operations/AclGroupBase.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/repoinit/parser/src/main/java/org/apache/sling/repoinit/parser/operations/AclGroupBase.java?rev=1779004&r1=1779003&r2=1779004&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/repoinit/parser/src/main/java/org/apache/sling/repoinit/parser/operations/AclGroupBase.java (original)
+++ sling/trunk/bundles/extensions/repoinit/parser/src/main/java/org/apache/sling/repoinit/parser/operations/AclGroupBase.java Mon Jan 16 10:44:56 2017
@@ -17,16 +17,28 @@
package org.apache.sling.repoinit.parser.operations;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/** Base class for operations that group AclLines */
abstract class AclGroupBase extends Operation {
+ /**
+ * Supported ACL options
+ */
+ public static final String ACL_OPTION_MERGE = "merge";
+ public static final String ACL_OPTION_MERGE_PRESERVE = "mergePreserve";
+
private final List<AclLine> lines;
+ private final List<String> aclOptions;
protected AclGroupBase(List<AclLine> lines) {
+ this(lines,new ArrayList<String>());
+ }
+ protected AclGroupBase(List<AclLine> lines, List<String> aclOptions) {
this.lines = Collections.unmodifiableList(lines);
+ this.aclOptions = Collections.unmodifiableList(aclOptions);
}
protected String getParametersDescription() {
@@ -40,4 +52,8 @@ import java.util.List;
public Collection<AclLine> getLines() {
return lines;
}
+
+ public List<String> getOptions() {
+ return aclOptions;
+ }
}
Modified: sling/trunk/bundles/extensions/repoinit/parser/src/main/java/org/apache/sling/repoinit/parser/operations/SetAclPaths.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/repoinit/parser/src/main/java/org/apache/sling/repoinit/parser/operations/SetAclPaths.java?rev=1779004&r1=1779003&r2=1779004&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/repoinit/parser/src/main/java/org/apache/sling/repoinit/parser/operations/SetAclPaths.java (original)
+++ sling/trunk/bundles/extensions/repoinit/parser/src/main/java/org/apache/sling/repoinit/parser/operations/SetAclPaths.java Mon Jan 16 10:44:56 2017
@@ -17,6 +17,7 @@
package org.apache.sling.repoinit.parser.operations;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -28,7 +29,11 @@ public class SetAclPaths extends AclGrou
private final List<String> paths;
public SetAclPaths(List<String> paths, List<AclLine> lines) {
- super(lines);
+ this(paths,lines,new ArrayList<String>());
+ }
+
+ public SetAclPaths(List<String> paths,List<AclLine> lines, List<String> aclOptions){
+ super(lines,aclOptions);
this.paths = Collections.unmodifiableList(paths);
}
Modified: sling/trunk/bundles/extensions/repoinit/parser/src/main/java/org/apache/sling/repoinit/parser/operations/SetAclPrincipals.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/repoinit/parser/src/main/java/org/apache/sling/repoinit/parser/operations/SetAclPrincipals.java?rev=1779004&r1=1779003&r2=1779004&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/repoinit/parser/src/main/java/org/apache/sling/repoinit/parser/operations/SetAclPrincipals.java (original)
+++ sling/trunk/bundles/extensions/repoinit/parser/src/main/java/org/apache/sling/repoinit/parser/operations/SetAclPrincipals.java Mon Jan 16 10:44:56 2017
@@ -17,6 +17,7 @@
package org.apache.sling.repoinit.parser.operations;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -28,10 +29,14 @@ public class SetAclPrincipals extends Ac
private final List<String> principals;
public SetAclPrincipals(List<String> principals, List<AclLine> lines) {
- super(lines);
+ this(principals,lines,new ArrayList<String>());
+ }
+
+ public SetAclPrincipals(List<String> principals,List<AclLine> lines, List<String> aclOptions) {
+ super(lines,aclOptions);
this.principals = Collections.unmodifiableList(principals);
}
-
+
protected String getParametersDescription() {
final StringBuilder sb = new StringBuilder();
sb.append(principals);
Modified: sling/trunk/bundles/extensions/repoinit/parser/src/main/javacc/RepoInitGrammar.jjt
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/repoinit/parser/src/main/javacc/RepoInitGrammar.jjt?rev=1779004&r1=1779003&r2=1779004&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/repoinit/parser/src/main/javacc/RepoInitGrammar.jjt (original)
+++ sling/trunk/bundles/extensions/repoinit/parser/src/main/javacc/RepoInitGrammar.jjt Mon Jan 16 10:44:56 2017
@@ -78,7 +78,9 @@ TOKEN:
| < RCURLY: "}" >
| < COMMA: "," >
| < STAR: "*" >
+| < EQUALS: "=" >
| < RESTRICTION: "restriction" >
+| < ACL_OPTIONS: "ACLOptions" >
/* The order of these fuzzy statements is important (first match wins?) */
| < NAMESPACED_ITEM: (["a"-"z"] | ["A"-"Z"])+ ":" (["a"-"z"] | ["A"-"Z"])+ >
@@ -211,15 +213,16 @@ void setAclPaths(List<Operation> result)
{
List<String> paths;
List<AclLine> lines = new ArrayList<AclLine>();
+ List<String> aclOptions;
}
{
- <SET> <ACL> <ON> paths = pathsList() <EOL>
+ <SET> <ACL> <ON> paths = pathsList() aclOptions=aclOptions() <EOL>
( removeStarLine(lines) | userPrivilegesLine(lines) | blankLine() ) +
<END>
( <EOL> | <EOF> )
{
- result.add(new SetAclPaths(paths, lines));
+ result.add(new SetAclPaths(paths, lines, aclOptions));
}
}
@@ -351,20 +354,43 @@ void pathPrivilegesLine(List<AclLine> li
lines.add(line);
}
}
+void aclOption(List<String> options) :
+{
+ Token t;
+}
+{
+ (t=<NAMESPACED_ITEM> | t=<STRING>)
+ {
+ options.add(t.image);
+ }
+}
+List<String> aclOptions() :
+{
+ List<String> aclOptionList = new ArrayList<String>();
+ Token t;
+}
+{
+ ( <LPAREN> <ACL_OPTIONS> <EQUALS> aclOption(aclOptionList) ( <COMMA> aclOption(aclOptionList) )* <RPAREN> )?
+
+ {
+ return aclOptionList;
+ }
+}
void setAclPrincipals(List<Operation> result) :
{
List <String> principals;
List<AclLine> lines = new ArrayList<AclLine>();
+ List<String> aclOptions;
}
{
- <SET> <ACL> <FOR> principals = principalsList() <EOL>
+ <SET> <ACL> <FOR> principals = principalsList() aclOptions=aclOptions() <EOL>
( removeStarLine(lines) | pathPrivilegesLine(lines) | blankLine() ) +
<END>
( <EOL> | <EOF> )
{
- result.add(new SetAclPrincipals(principals, lines));
+ result.add(new SetAclPrincipals(principals, lines, aclOptions));
}
}
Modified: sling/trunk/bundles/extensions/repoinit/parser/src/test/java/org/apache/sling/repoinit/parser/test/OperationToStringVisitor.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/repoinit/parser/src/test/java/org/apache/sling/repoinit/parser/test/OperationToStringVisitor.java?rev=1779004&r1=1779003&r2=1779004&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/repoinit/parser/src/test/java/org/apache/sling/repoinit/parser/test/OperationToStringVisitor.java (original)
+++ sling/trunk/bundles/extensions/repoinit/parser/src/test/java/org/apache/sling/repoinit/parser/test/OperationToStringVisitor.java Mon Jan 16 10:44:56 2017
@@ -19,6 +19,7 @@ package org.apache.sling.repoinit.parser
import java.io.PrintWriter;
import java.util.Collection;
+import java.util.List;
import org.apache.sling.repoinit.parser.operations.AclLine;
import org.apache.sling.repoinit.parser.operations.CreatePath;
@@ -79,6 +80,9 @@ class OperationToStringVisitor implement
out.print(p);
out.print(' ');
}
+
+ dumpAclOptions(s.getOptions());
+
out.println();
dumpAclLines(s.getLines());
}
@@ -91,6 +95,9 @@ class OperationToStringVisitor implement
out.print(p);
out.print(' ');
}
+
+ dumpAclOptions(s.getOptions());
+
out.println();
dumpAclLines(s.getLines());
}
@@ -116,4 +123,10 @@ class OperationToStringVisitor implement
out.println(line);
}
}
+
+ private void dumpAclOptions(List<String> options){
+ if(options != null && options.size() > 0){
+ out.print("ACLOptions="+options);
+ }
+ }
}
Added: sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-12-output.txt
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-12-output.txt?rev=1779004&view=auto
==============================================================================
--- sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-12-output.txt (added)
+++ sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-12-output.txt Mon Jan 16 10:44:56 2017
@@ -0,0 +1,10 @@
+SetAclPaths on /libs /apps ACLOptions=[merge]
+ AclLine REMOVE_ALL {principals=[user1, user2]}
+ AclLine ALLOW {principals=[user1, user2], privileges=[jcr:read]}
+ AclLine REMOVE_ALL {principals=[another]}
+ AclLine ALLOW {principals=[another], privileges=[x:y]}
+SetAclPaths on /libs /apps ACLOptions=[mergePreserve, someOtherOption, someOther123, namespaced:option]
+ AclLine REMOVE_ALL {principals=[user1, user2]}
+ AclLine ALLOW {principals=[user1, user2], privileges=[jcr:read]}
+ AclLine REMOVE_ALL {principals=[another]}
+ AclLine ALLOW {principals=[another], privileges=[x:y]}
\ No newline at end of file
Added: sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-12.txt
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-12.txt?rev=1779004&view=auto
==============================================================================
--- sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-12.txt (added)
+++ sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-12.txt Mon Jan 16 10:44:56 2017
@@ -0,0 +1,17 @@
+# Test Path centring Set Acl with options SLING-6423
+set ACL on /libs,/apps (ACLOptions=merge)
+ remove * for user1,user2
+ allow jcr:read for user1,user2
+
+ remove * for another
+ allow x:y for another
+end
+
+#multiple options test
+set ACL on /libs,/apps (ACLOptions=mergePreserve,someOtherOption,someOther123,namespaced:option)
+ remove * for user1,user2
+ allow jcr:read for user1,user2
+
+ remove * for another
+ allow x:y for another
+end
\ No newline at end of file
Added: sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-31-output.txt
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-31-output.txt?rev=1779004&view=auto
==============================================================================
--- sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-31-output.txt (added)
+++ sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-31-output.txt Mon Jan 16 10:44:56 2017
@@ -0,0 +1,6 @@
+SetAclPrincipals for user1 u2 ACLOptions=[mergePreserve]
+ AclLine REMOVE_ALL {paths=[/libs, /apps]}
+ AclLine ALLOW {paths=[/content], privileges=[jcr:read]}
+SetAclPrincipals for user1 u2 ACLOptions=[mergePreserve, someOtherOption, someOther123, namespaced:option]
+ AclLine REMOVE_ALL {paths=[/libs, /apps]}
+ AclLine ALLOW {paths=[/content], privileges=[jcr:read]}
Added: sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-31.txt
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-31.txt?rev=1779004&view=auto
==============================================================================
--- sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-31.txt (added)
+++ sling/trunk/bundles/extensions/repoinit/parser/src/test/resources/testcases/test-31.txt Mon Jan 16 10:44:56 2017
@@ -0,0 +1,11 @@
+# Test the principal-centered ACL syntax with options SLING-6423
+
+set ACL for user1,u2 (ACLOptions=mergePreserve)
+ remove * on /libs,/apps
+ allow jcr:read on /content
+end
+# with multiple options
+set ACL for user1,u2 (ACLOptions=mergePreserve,someOtherOption,someOther123,namespaced:option)
+ remove * on /libs,/apps
+ allow jcr:read on /content
+end
\ No newline at end of file