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 2020/03/09 13:40:20 UTC

[sling-org-apache-sling-repoinit-parser] branch master updated: SLING-9084 Support for group membership in repoinit

This is an automated email from the ASF dual-hosted git repository.

bdelacretaz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-repoinit-parser.git


The following commit(s) were added to refs/heads/master by this push:
     new d5f7eab  SLING-9084 Support for group membership in repoinit
     new 222f0d9  Merge pull request #4 from nit23uec/master
d5f7eab is described below

commit d5f7eab1d3666650e290882049b785e0b214d082
Author: Nitin Gupta <ni...@adobe.com>
AuthorDate: Mon Mar 9 17:12:30 2020 +0530

    SLING-9084 Support for group membership in repoinit
---
 pom.xml                                            |  2 +-
 .../parser/operations/AddGroupMembers.java         | 58 ++++++++++++++++++++++
 .../parser/operations/OperationVisitor.java        |  2 +
 .../parser/operations/RemoveGroupMembers.java      | 58 ++++++++++++++++++++++
 .../repoinit/parser/operations/package-info.java   |  2 +-
 src/main/javacc/RepoInitGrammar.jjt                | 23 +++++++++
 .../parser/test/OperationToStringVisitor.java      | 30 +++++++++++
 src/test/resources/testcases/test-64-output.txt    |  1 +
 src/test/resources/testcases/test-64.txt           |  2 +
 src/test/resources/testcases/test-65-output.txt    |  1 +
 src/test/resources/testcases/test-65.txt           |  2 +
 src/test/resources/testcases/test-66-output.txt    |  5 ++
 src/test/resources/testcases/test-66.txt           |  6 +++
 13 files changed, 190 insertions(+), 2 deletions(-)

diff --git a/pom.xml b/pom.xml
index 99921de..c9968f5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@
   </parent>
 
   <artifactId>org.apache.sling.repoinit.parser</artifactId>
-  <version>1.4.3-SNAPSHOT</version>
+  <version>1.5.1-SNAPSHOT</version>
   <name>Apache Sling Repoinit Parser</name>
   <description>Parser for the Repository Initialization language used in Sling</description>
 
diff --git a/src/main/java/org/apache/sling/repoinit/parser/operations/AddGroupMembers.java b/src/main/java/org/apache/sling/repoinit/parser/operations/AddGroupMembers.java
new file mode 100644
index 0000000..58fe8f3
--- /dev/null
+++ b/src/main/java/org/apache/sling/repoinit/parser/operations/AddGroupMembers.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.sling.repoinit.parser.operations;
+
+import java.util.List;
+
+public class AddGroupMembers extends Operation {
+    private final String groupname;
+    private final List<String> members;
+
+
+    /**
+     * Operation that add members to a group.
+     *
+     * @param members   members of the group
+     * @param groupname the name of the group to whch members are to be added
+     */
+    public AddGroupMembers(List<String> members, String groupname) {
+        this.groupname = groupname;
+        this.members = members;
+    }
+
+    @Override
+    public void accept(OperationVisitor v) {
+        v.visitAddGroupMembers(this);
+    }
+
+    @Override
+    protected String getParametersDescription() {
+        final StringBuilder sb = new StringBuilder();
+        sb.append(members);
+        sb.append(" in group ").append(groupname);
+        return sb.toString();
+    }
+
+    public String getGroupname() {
+        return groupname;
+    }
+
+    public List<String> getMembers() {
+        return members;
+    }
+}
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 5b4b6b7..c46e2ce 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
@@ -35,4 +35,6 @@ public interface OperationVisitor {
     void visitRegisterNodetypes(RegisterNodetypes b);
     void visitRegisterPrivilege(RegisterPrivilege rp);
     void visitDisableServiceUser(DisableServiceUser dsu);
+    void visitAddGroupMembers(AddGroupMembers am);
+    void visitRemoveGroupMembers(RemoveGroupMembers rm);
 }
diff --git a/src/main/java/org/apache/sling/repoinit/parser/operations/RemoveGroupMembers.java b/src/main/java/org/apache/sling/repoinit/parser/operations/RemoveGroupMembers.java
new file mode 100644
index 0000000..0d7d4dc
--- /dev/null
+++ b/src/main/java/org/apache/sling/repoinit/parser/operations/RemoveGroupMembers.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.sling.repoinit.parser.operations;
+
+import java.util.List;
+
+public class RemoveGroupMembers extends Operation {
+    private final String groupname;
+    private final List<String> members;
+
+
+    /**
+     * Operation that removes members from a group.
+     *
+     * @param members   members of the group
+     * @param groupname the name of the group from which members are to be removed
+     */
+    public RemoveGroupMembers(List<String> members, String groupname) {
+        this.groupname = groupname;
+        this.members = members;
+    }
+
+    @Override
+    public void accept(OperationVisitor v) {
+        v.visitRemoveGroupMembers(this);
+    }
+
+    @Override
+    protected String getParametersDescription() {
+        final StringBuilder sb = new StringBuilder();
+        sb.append(members);
+        sb.append(" in group ").append(groupname);
+        return sb.toString();
+    }
+
+    public String getGroupname() {
+        return groupname;
+    }
+
+    public List<String> getMembers() {
+        return members;
+    }
+}
diff --git a/src/main/java/org/apache/sling/repoinit/parser/operations/package-info.java b/src/main/java/org/apache/sling/repoinit/parser/operations/package-info.java
index 0f1d82c..bc04ed8 100644
--- a/src/main/java/org/apache/sling/repoinit/parser/operations/package-info.java
+++ b/src/main/java/org/apache/sling/repoinit/parser/operations/package-info.java
@@ -15,6 +15,6 @@
  * limitations under the License.
  ******************************************************************************/
 
-@org.osgi.annotation.versioning.Version("4.4.0")
+@org.osgi.annotation.versioning.Version("4.5.0")
 package org.apache.sling.repoinit.parser.operations;
 
diff --git a/src/main/javacc/RepoInitGrammar.jjt b/src/main/javacc/RepoInitGrammar.jjt
index 23d9662..306d232 100644
--- a/src/main/javacc/RepoInitGrammar.jjt
+++ b/src/main/javacc/RepoInitGrammar.jjt
@@ -57,6 +57,7 @@ TOKEN:
     < SET: "set" >
 |   < ACL: "ACL" >
 |   < ON: "on" >
+|   < IN: "in" >
 |   < REMOVE: "remove" >
 |   < ALLOW: "allow" >
 |   < DENY: "deny" >
@@ -65,6 +66,7 @@ TOKEN:
 |   < DELETE: "delete" >
 |   < DISABLE: "disable" >
 |   < SERVICE: "service" >
+|   < ADD: "add" >
 |   < MIXIN: "mixin" >
 |   < PATH: "path" >
 |   < END: "end" >
@@ -76,6 +78,7 @@ TOKEN:
 |   < REGISTER: "register" >
 |   < NAMESPACE: "namespace" >
 |   < PRIVILEGE: "privilege" >
+|   < MEMBERS: "members" >
 |   < WITH: "with" >
 |   < ABSTRACT: "abstract" >
 |   < PASSWORD: "password" >
@@ -144,6 +147,7 @@ List<Operation> parse() :
         | createUserStatement(result)
         | deleteUserStatement(result)
         | disableServiceUserStatement(result)
+        | groupMembershipStatement(result)
         | blankLine() 
     ) * 
     <EOF>
@@ -662,3 +666,22 @@ void disableServiceUserStatement(List<Operation> result) :
         result.add(new DisableServiceUser(user.image, msg == null ? null : msg.image));
     }
 }
+void groupMembershipStatement(List<Operation> result) :
+{
+    List <String> members;
+    Token t;
+    Token group = null;
+}
+{
+    (t=<ADD> | t=<REMOVE>) <MEMBERS>
+       ( members =  principalsList() )
+        <IN> <GROUP>
+        ( group = <STRING> )
+    {
+        if(ADD == t.kind) {
+           result.add(new AddGroupMembers(members, group.image));
+        } else {
+           result.add(new RemoveGroupMembers(members, group.image));
+        }
+    }
+}
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 79aba7f..88f4a04 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
@@ -37,6 +37,8 @@ import org.apache.sling.repoinit.parser.operations.RegisterPrivilege;
 import org.apache.sling.repoinit.parser.operations.SetAclPaths;
 import org.apache.sling.repoinit.parser.operations.SetAclPrincipalBased;
 import org.apache.sling.repoinit.parser.operations.SetAclPrincipals;
+import org.apache.sling.repoinit.parser.operations.AddGroupMembers;
+import org.apache.sling.repoinit.parser.operations.RemoveGroupMembers;
 
 /** OperationVisitor that dumps the operations using
  *  their toString() methods
@@ -169,4 +171,32 @@ class OperationToStringVisitor implements OperationVisitor {
     public void visitDeleteGroup(DeleteGroup g) {
         out.println(g.toString());
     }
+
+    @Override
+    public void visitAddGroupMembers(AddGroupMembers am) {
+        out.print(am.getClass().getSimpleName());
+        out.print(" ");
+        List<String> members =  am.getMembers();
+        for(String p : members) {
+            out.print(p);
+            out.print(" ");
+        }
+        out.print("in group ");
+        out.print(am.getGroupname());
+        out.println();
+    }
+
+    @Override
+    public void visitRemoveGroupMembers(RemoveGroupMembers rm) {
+        out.print(rm.getClass().getSimpleName());
+        out.print(" ");
+        List<String> members =  rm.getMembers();
+        for(String p : members) {
+            out.print(p);
+            out.print(" ");
+        }
+        out.print("in group ");
+        out.print(rm.getGroupname());
+        out.println();
+    }
 }
diff --git a/src/test/resources/testcases/test-64-output.txt b/src/test/resources/testcases/test-64-output.txt
new file mode 100644
index 0000000..a25dcb4
--- /dev/null
+++ b/src/test/resources/testcases/test-64-output.txt
@@ -0,0 +1 @@
+AddGroupMembers user1 user2 in group grpA
\ No newline at end of file
diff --git a/src/test/resources/testcases/test-64.txt b/src/test/resources/testcases/test-64.txt
new file mode 100644
index 0000000..dd2df1b
--- /dev/null
+++ b/src/test/resources/testcases/test-64.txt
@@ -0,0 +1,2 @@
+# Test "add members" statements
+add members user1,user2 in group grpA
\ No newline at end of file
diff --git a/src/test/resources/testcases/test-65-output.txt b/src/test/resources/testcases/test-65-output.txt
new file mode 100644
index 0000000..c9cb6d7
--- /dev/null
+++ b/src/test/resources/testcases/test-65-output.txt
@@ -0,0 +1 @@
+RemoveGroupMembers user3 user5 in group grpB
\ No newline at end of file
diff --git a/src/test/resources/testcases/test-65.txt b/src/test/resources/testcases/test-65.txt
new file mode 100644
index 0000000..9626931
--- /dev/null
+++ b/src/test/resources/testcases/test-65.txt
@@ -0,0 +1,2 @@
+# Test "remove members" statements
+remove members user3,user5 in group grpB
\ No newline at end of file
diff --git a/src/test/resources/testcases/test-66-output.txt b/src/test/resources/testcases/test-66-output.txt
new file mode 100644
index 0000000..2013fb7
--- /dev/null
+++ b/src/test/resources/testcases/test-66-output.txt
@@ -0,0 +1,5 @@
+AddGroupMembers user1 user2 in group grpA
+AddGroupMembers user3 in group grpB
+AddGroupMembers user4 user5 in group grpB
+RemoveGroupMembers user1 in group grpA
+RemoveGroupMembers user3 user5 in group grpB
\ No newline at end of file
diff --git a/src/test/resources/testcases/test-66.txt b/src/test/resources/testcases/test-66.txt
new file mode 100644
index 0000000..c60b1e0
--- /dev/null
+++ b/src/test/resources/testcases/test-66.txt
@@ -0,0 +1,6 @@
+# Test add and remove together statements
+add members user1,user2 in group grpA
+add members user3 in group grpB
+add members user4,user5 in group grpB
+remove members user1 in group grpA
+remove members user3,user5 in group grpB
\ No newline at end of file