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