SLING-9970 : SystemUser.getPath doesn't reflect the repository path
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/AccessControlEntry.java b/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/AccessControlEntry.java
index b6b850b..f07eef7 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/AccessControlEntry.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/AccessControlEntry.java
@@ -30,16 +30,13 @@
 
     private final String privileges;
 
-    private final RepoPath path;
-
     private final RepoPath repositoryPath;
 
     private final List<String> restrictions = new LinkedList<>();
 
-    public AccessControlEntry(boolean isAllow, String privileges, RepoPath path, RepoPath repositoryPath) {
+    public AccessControlEntry(boolean isAllow, String privileges, RepoPath repositoryPath) {
         this.isAllow = isAllow;
         this.privileges = privileges;
-        this.path = path;
         this.repositoryPath = repositoryPath;
     }
 
@@ -57,10 +54,6 @@
         return privileges;
     }
 
-    public RepoPath getPath() {
-        return path;
-    }
-
     public RepoPath getRepositoryPath() {
         return repositoryPath;
     }
@@ -76,7 +69,7 @@
                + ", privileges="
                + privileges
                + ", path="
-               + path
+               + repositoryPath
                + ", restrictions="
                + restrictions
                + "]";
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java b/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java
index e645faf..63084f2 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java
@@ -149,7 +149,7 @@
             while (authorizationsIterator.hasNext()) {
                 AccessControlEntry acl = authorizationsIterator.next();
 
-                if (acl.getPath().startsWith(systemUser.getPath())) {
+                if (acl.getRepositoryPath().startsWith(systemUser.getPath())) {
                     authorizationsIterator.remove();
                 }
             }
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandler.java
index 130ce41..38b9204 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandler.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandler.java
@@ -79,8 +79,7 @@
         StringWriter stringWriter = new StringWriter();
         handler.setResult(new StreamResult(stringWriter));
 
-        RepPolicyParser systemUserParser = new RepPolicyParser(new RepoPath(resourcePath),
-                                                               new RepoPath(PlatformNameFormat.getRepositoryPath(resourcePath)),
+        RepPolicyParser systemUserParser = new RepPolicyParser(new RepoPath(PlatformNameFormat.getRepositoryPath(resourcePath)),
                                                                converter.getAclManager(),
                                                                handler);
         boolean hasRejectedAcls;
@@ -124,8 +123,6 @@
 
         private final Stack<AccessControlEntry> acls = new Stack<>();
 
-        private final RepoPath path;
-
         private final RepoPath repositoryPath;
 
         private final AclManager aclManager;
@@ -140,9 +137,8 @@
         // just internal pointer for every iteration
         private boolean processCurrentAcl = false;
 
-        public RepPolicyParser(RepoPath path, RepoPath repositoryPath, AclManager aclManager, TransformerHandler handler) {
+        public RepPolicyParser(RepoPath repositoryPath, AclManager aclManager, TransformerHandler handler) {
             super(REP_ACL);
-            this.path = path;
             this.repositoryPath = repositoryPath;
             this.aclManager = aclManager;
             this.handler = handler;
@@ -165,7 +161,7 @@
 
                     String privileges = extractValue(attributes.getValue(REP_PRIVILEGES));
 
-                    AccessControlEntry acl = new AccessControlEntry(isAllow, privileges, path, repositoryPath);
+                    AccessControlEntry acl = new AccessControlEntry(isAllow, privileges, repositoryPath);
 
                     processCurrentAcl = aclManager.addAcl(principalName, acl);
                     if (processCurrentAcl) {
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandler.java
index 081c351..091ffe9 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandler.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandler.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sling.feature.cpconverter.handlers;
 
+import org.apache.jackrabbit.vault.util.PlatformNameFormat;
 import org.xml.sax.Attributes;
 
 import org.apache.jackrabbit.vault.fs.io.Archive;
@@ -42,7 +43,7 @@
             path = matcher.group(1);
         }
 
-        RepoPath currentPath = new RepoPath(path).getParent();
+        RepoPath currentPath = new RepoPath(PlatformNameFormat.getRepositoryPath(path)).getParent();
 
         SystemUserParser systemUserParser = new SystemUserParser(converter, currentPath);
         try (InputStream input = archive.openInputStream(entry)) {
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/accesscontrol/AclManagerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/accesscontrol/AclManagerTest.java
index dfa4806..41823c1 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/accesscontrol/AclManagerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/accesscontrol/AclManagerTest.java
@@ -155,7 +155,7 @@
     }
 
     private static AccessControlEntry newAcl(boolean isAllow, String privileges, String path) {
-        return new AccessControlEntry(isAllow, privileges, new RepoPath(path), new RepoPath(PlatformNameFormat.getRepositoryPath(path)));
+        return new AccessControlEntry(isAllow, privileges, new RepoPath(PlatformNameFormat.getRepositoryPath(path)));
     }
 
 }
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandlerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandlerTest.java
index 0346414..72f88bc 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandlerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandlerTest.java
@@ -98,6 +98,21 @@
         assertNull(repoinitExtension);
     }
 
+    /**
+     * @see <a href="https://issues.apache.org/jira/browse/SLING-9970">SLING-9970</a>
+     */
+    @Test
+    public void testSystemUserPathIsConvertedToRepositoryPath() throws Exception {
+        String path = "/jcr_root/home/users/system/_my_feature/_my_user-node/.content.xml";
+        Extension repoinitExtension = parseAndSetRepoinit(path);
+        assertNotNull(repoinitExtension);
+
+        String actual = repoinitExtension.getText();
+        assertFalse(actual.contains("/jcr_root/home/users/system/_my_feature"));
+        assertFalse(actual.contains("/home/users/system/_my_feature"));
+        assertTrue(actual.contains("/home/users/system/my:feature"));
+    }
+
     private Extension parseAndSetRepoinit(String path) throws Exception {
         Archive archive = mock(Archive.class);
         Entry entry = mock(Entry.class);
diff --git a/src/test/resources/org/apache/sling/feature/cpconverter/handlers/jcr_root/home/users/system/_my_feature/_my_user-node/.content.xml b/src/test/resources/org/apache/sling/feature/cpconverter/handlers/jcr_root/home/users/system/_my_feature/_my_user-node/.content.xml
new file mode 100644
index 0000000..1ede48b
--- /dev/null
+++ b/src/test/resources/org/apache/sling/feature/cpconverter/handlers/jcr_root/home/users/system/_my_feature/_my_user-node/.content.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:rep="internal"
+          jcr:primaryType="rep:SystemUser"
+          jcr:uuid="c74065e3-2bdf-3203-b765-200b2f3113ac"
+          rep:authorizableId="SLING-9970"
+          rep:principalName="SLING-9970"/>