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