You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:49:15 UTC

[sling-org-apache-sling-jcr-jackrabbit-accessmanager] 10/14: SLING-6684: Replace commons.json usage in org.apache.sling.jcr.jackrabbit.accessmanager

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

rombert pushed a commit to annotated tag org.apache.sling.jcr.jackrabbit.accessmanager-3.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-jackrabbit-accessmanager.git

commit 5e333e866d3fe9a5e9e838f63003ae0859cb4de8
Author: Karl Pauls <pa...@apache.org>
AuthorDate: Tue Mar 28 13:02:40 2017 +0000

    SLING-6684: Replace commons.json usage in org.apache.sling.jcr.jackrabbit.accessmanager
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/jcr/jackrabbit-accessmanager@1789115 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml                                            | 22 +++---
 .../sling/jcr/jackrabbit/accessmanager/GetAcl.java |  8 +-
 .../jackrabbit/accessmanager/GetEffectiveAcl.java  |  8 +-
 .../jcr/jackrabbit/accessmanager/package-info.java |  2 +-
 .../accessmanager/post/AbstractGetAclServlet.java  | 92 ++++++++++++++++------
 .../accessmanager/post/GetAclServlet.java          |  7 +-
 .../accessmanager/post/GetEffectiveAclServlet.java |  7 +-
 .../accessmanager/post/package-info.java           |  2 +-
 8 files changed, 95 insertions(+), 53 deletions(-)

diff --git a/pom.xml b/pom.xml
index f852f82..0578dfc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
 
     <artifactId>org.apache.sling.jcr.jackrabbit.accessmanager</artifactId>
     <packaging>bundle</packaging>
-    <version>2.1.3-SNAPSHOT</version>
+    <version>3.0.1-SNAPSHOT</version>
     <name>Apache Sling Jackrabbit JSR-283 Access Control Manager Support</name>
     <description>
         Provides SlingPostOperations for the Jackrabbit JSR-283 Access Control Manager.
@@ -53,6 +53,10 @@
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
                 <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                    </instructions>
+                </configuration>
             </plugin>
         </plugins>
     </build>
@@ -62,14 +66,6 @@
             <groupId>javax.servlet</groupId>
             <artifactId>javax.servlet-api</artifactId>
         </dependency>
-
-        <dependency>
-            <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.commons.json</artifactId>
-            <version>2.0.4-incubator</version>
-            <scope>provided</scope>
-        </dependency>
-
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.api</artifactId>
@@ -85,7 +81,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.servlets.post</artifactId>
-            <version>2.1.2</version>
+            <version>2.3.15-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
@@ -103,5 +99,11 @@
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.commons.johnzon</artifactId>
+            <version>0.1.0-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/GetAcl.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/GetAcl.java
index 5bae6d4..be9d415 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/GetAcl.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/GetAcl.java
@@ -20,9 +20,7 @@ package org.apache.sling.jcr.jackrabbit.accessmanager;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
-
-import org.apache.sling.commons.json.JSONException;
-import org.apache.sling.commons.json.JSONObject;
+import javax.json.JsonObject;
 
 /**
  * The <code>GetAcl</code> service api.
@@ -41,8 +39,8 @@ public interface GetAcl {
      * @return the ACL as a JSON object 
 	 * @throws RepositoryException
 	 */
-	JSONObject getAcl(Session jcrSession,
+	JsonObject getAcl(Session jcrSession,
 							String resourcePath
-				) throws RepositoryException, JSONException;
+				) throws RepositoryException;
 	
 }
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/GetEffectiveAcl.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/GetEffectiveAcl.java
index 2a68a33..c192df0 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/GetEffectiveAcl.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/GetEffectiveAcl.java
@@ -20,9 +20,7 @@ package org.apache.sling.jcr.jackrabbit.accessmanager;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
-
-import org.apache.sling.commons.json.JSONException;
-import org.apache.sling.commons.json.JSONObject;
+import javax.json.JsonObject;
 
 /**
  * The <code>GetAcl</code> service api.
@@ -41,8 +39,8 @@ public interface GetEffectiveAcl {
      * @return the ACL as a JSON object 
 	 * @throws RepositoryException
 	 */
-	JSONObject getEffectiveAcl(Session jcrSession,
+	JsonObject getEffectiveAcl(Session jcrSession,
 							String resourcePath
-				) throws RepositoryException, JSONException;
+				) throws RepositoryException;
 	
 }
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/package-info.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/package-info.java
index f3c7621..5119ee5 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/package-info.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@org.osgi.annotation.versioning.Version("2.1.1")
+@org.osgi.annotation.versioning.Version("3.0.0")
 package org.apache.sling.jcr.jackrabbit.accessmanager;
 
 
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractGetAclServlet.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractGetAclServlet.java
index 204aaff..fd06c0d 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractGetAclServlet.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractGetAclServlet.java
@@ -36,6 +36,12 @@ import javax.jcr.Session;
 import javax.jcr.security.AccessControlEntry;
 import javax.jcr.security.AccessControlManager;
 import javax.jcr.security.Privilege;
+import javax.json.Json;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
+import javax.json.JsonValue;
+import javax.json.stream.JsonGenerator;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletResponse;
 
@@ -43,8 +49,6 @@ import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.resource.ResourceNotFoundException;
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
-import org.apache.sling.commons.json.JSONException;
-import org.apache.sling.commons.json.JSONObject;
 import org.apache.sling.jcr.base.util.AccessControlUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -69,7 +73,7 @@ public abstract class AbstractGetAclServlet extends SlingAllMethodsServlet {
 			Session session = request.getResourceResolver().adaptTo(Session.class);
 	    	String resourcePath = request.getResource().getPath();
 
-	    	JSONObject acl = internalGetAcl(session, resourcePath);
+	    	JsonObject acl = internalGetAcl(session, resourcePath);
 	        response.setContentType("application/json");
 	        response.setCharacterEncoding("UTF-8");
 
@@ -84,11 +88,9 @@ public abstract class AbstractGetAclServlet extends SlingAllMethodsServlet {
 				}
 	        }
 
-	        if (isTidy) {
-		        response.getWriter().append(acl.toString(2));
-	        } else {
-	        	acl.write(response.getWriter());
-	        }
+	        Map<String, Object> options = new HashMap<>();
+            options.put(JsonGenerator.PRETTY_PRINTING, isTidy);
+	        Json.createGeneratorFactory(options).createGenerator(response.getWriter()).write(acl).flush();
         } catch (AccessDeniedException ade) {
             response.sendError(HttpServletResponse.SC_NOT_FOUND);
         } catch (ResourceNotFoundException rnfe) {
@@ -102,8 +104,7 @@ public abstract class AbstractGetAclServlet extends SlingAllMethodsServlet {
     }
 
     @SuppressWarnings("unchecked")
-	protected JSONObject internalGetAcl(Session jcrSession, String resourcePath)
-    			throws RepositoryException, JSONException {
+	protected JsonObject internalGetAcl(Session jcrSession, String resourcePath) throws RepositoryException {
 
         if (jcrSession == null) {
             throw new RepositoryException("JCR Session not found");
@@ -184,33 +185,78 @@ public abstract class AbstractGetAclServlet extends SlingAllMethodsServlet {
             }
         }
 
-        List<JSONObject> aclList = new ArrayList<JSONObject>();
+        List<JsonObject> aclList = new ArrayList<>();
         Set<Entry<String, Map<String, Object>>> entrySet = aclMap.entrySet();
         for (Entry<String, Map<String, Object>> entry : entrySet) {
             String principalName = entry.getKey();
             Map<String, Object> value = entry.getValue();
 
-            JSONObject aceObject = new JSONObject();
-            aceObject.put("principal", principalName);
+            JsonObjectBuilder aceObject = Json.createObjectBuilder();
+            aceObject.add("principal", principalName);
 
-            Set<String> grantedSet = (Set<String>) value.get("granted");
+            Set<Privilege> grantedSet = (Set<Privilege>) value.get("granted");
             if (grantedSet != null && !grantedSet.isEmpty()) {
-                aceObject.put("granted", grantedSet);
+                JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
+                for (Privilege v : grantedSet)
+                {
+                    arrayBuilder.add(v.getName());
+                }
+                aceObject.add("granted", arrayBuilder);
             }
 
-            Set<String> deniedSet = (Set<String>) value.get("denied");
+            Set<Privilege> deniedSet = (Set<Privilege>) value.get("denied");
             if (deniedSet != null && !deniedSet.isEmpty()) {
-                aceObject.put("denied", deniedSet);
+                JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
+                for (Privilege v : deniedSet)
+                {
+                    arrayBuilder.add(v.getName());
+                }
+                aceObject.add("denied", arrayBuilder);
             }
-            aceObject.put("order", value.get("order"));
-            aclList.add(aceObject);
+            aceObject.add("order", (Integer) value.get("order"));
+            aclList.add(aceObject.build());
         }
-        JSONObject jsonAclMap = new JSONObject(aclMap);
-        for ( JSONObject jsonObj : aclList) {
-        	jsonAclMap.put(jsonObj.getString("principal"), jsonObj);
+        JsonObjectBuilder jsonAclMap = Json.createObjectBuilder();
+        for (Map.Entry<String, Map<String, Object>> entry : aclMap.entrySet())
+        {
+            JsonObjectBuilder builder = Json.createObjectBuilder();
+            for (Map.Entry<String, Object> inner : entry.getValue().entrySet())
+            {
+                addTo(builder, inner.getKey(), inner.getValue());
+            }
+            jsonAclMap.add(entry.getKey(), builder);
+        }
+        for (JsonObject jsonObj : aclList) {
+            jsonAclMap.add(jsonObj.getString("principal"), jsonObj);
         }
 
-        return jsonAclMap;
+        return jsonAclMap.build();
+    }
+    
+    private JsonObjectBuilder addTo(JsonObjectBuilder builder, String key, Object value) {
+        if (value instanceof Byte || value instanceof Short || value instanceof Integer || value instanceof Long)
+        {
+            builder.add(key, ((Number) value).longValue());
+        }
+        else if (value instanceof Float || value instanceof Double)
+        {
+            builder.add(key, ((Number) value).doubleValue());
+        }
+        else if (value instanceof Privilege)
+        {
+            JsonObjectBuilder privilegeBuilder = Json.createObjectBuilder();
+            privilegeBuilder.add("name", ((Privilege) value).getName());
+            builder.add(key, privilegeBuilder);
+        }
+        else if (value instanceof String)
+        {
+            builder.add(key, (String) value);
+        }
+        else
+        {
+            builder.add(key, value.toString());
+        }
+        return builder;
     }
 
 	/**
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetAclServlet.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetAclServlet.java
index ba490a9..2bd7ba8 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetAclServlet.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetAclServlet.java
@@ -25,10 +25,9 @@ import javax.jcr.security.AccessControlEntry;
 import javax.jcr.security.AccessControlList;
 import javax.jcr.security.AccessControlManager;
 import javax.jcr.security.AccessControlPolicy;
+import javax.json.JsonObject;
 import javax.servlet.Servlet;
 
-import org.apache.sling.commons.json.JSONException;
-import org.apache.sling.commons.json.JSONObject;
 import org.apache.sling.jcr.base.util.AccessControlUtil;
 import org.apache.sling.jcr.jackrabbit.accessmanager.GetAcl;
 import org.osgi.service.component.annotations.Component;
@@ -112,8 +111,8 @@ public class GetAclServlet extends AbstractGetAclServlet implements GetAcl {
 	/* (non-Javadoc)
 	 * @see org.apache.sling.jcr.jackrabbit.accessmanager.GetAcl#getAcl(javax.jcr.Session, java.lang.String)
 	 */
-	public JSONObject getAcl(Session jcrSession, String resourcePath)
-			throws RepositoryException, JSONException {
+	public JsonObject getAcl(Session jcrSession, String resourcePath)
+			throws RepositoryException {
 		return internalGetAcl(jcrSession, resourcePath);
 	}
 
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetEffectiveAclServlet.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetEffectiveAclServlet.java
index 3a4c6cd..3938fc8 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetEffectiveAclServlet.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetEffectiveAclServlet.java
@@ -25,10 +25,9 @@ import javax.jcr.security.AccessControlEntry;
 import javax.jcr.security.AccessControlList;
 import javax.jcr.security.AccessControlManager;
 import javax.jcr.security.AccessControlPolicy;
+import javax.json.JsonObject;
 import javax.servlet.Servlet;
 
-import org.apache.sling.commons.json.JSONException;
-import org.apache.sling.commons.json.JSONObject;
 import org.apache.sling.jcr.base.util.AccessControlUtil;
 import org.apache.sling.jcr.jackrabbit.accessmanager.GetEffectiveAcl;
 import org.osgi.service.component.annotations.Component;
@@ -112,8 +111,8 @@ public class GetEffectiveAclServlet extends AbstractGetAclServlet implements Get
     /* (non-Javadoc)
 	 * @see org.apache.sling.jcr.jackrabbit.accessmanager.GetEffectiveAcl#getEffectiveAcl(javax.jcr.Session, java.lang.String)
 	 */
-	public JSONObject getEffectiveAcl(Session jcrSession, String resourcePath)
-			throws RepositoryException, JSONException {
+	public JsonObject getEffectiveAcl(Session jcrSession, String resourcePath)
+			throws RepositoryException {
 		return internalGetAcl(jcrSession, resourcePath);
 	}
 
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/package-info.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/package-info.java
index 91d1967..c0361a1 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/package-info.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@org.osgi.annotation.versioning.Version("2.1.2")
+@org.osgi.annotation.versioning.Version("3.0.0")
 package org.apache.sling.jcr.jackrabbit.accessmanager.post;
 
 

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.