Author: pauls Date: Tue Mar 28 13:02:40 2017 New Revision: 1789115 URL: http://svn.apache.org/viewvc?rev=1789115&view=rev Log: SLING-6684: Replace commons.json usage in org.apache.sling.jcr.jackrabbit.accessmanager
Modified: sling/trunk/bundles/jcr/jackrabbit-accessmanager/pom.xml sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/GetAcl.java sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/GetEffectiveAcl.java sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/package-info.java sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractGetAclServlet.java sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetAclServlet.java sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetEffectiveAclServlet.java sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/package-info.java Modified: sling/trunk/bundles/jcr/jackrabbit-accessmanager/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/jackrabbit-accessmanager/pom.xml?rev=1789115&r1=1789114&r2=1789115&view=diff ============================================================================== --- sling/trunk/bundles/jcr/jackrabbit-accessmanager/pom.xml (original) +++ sling/trunk/bundles/jcr/jackrabbit-accessmanager/pom.xml Tue Mar 28 13:02:40 2017 @@ -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> Modified: sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/GetAcl.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/GetAcl.java?rev=1789115&r1=1789114&r2=1789115&view=diff ============================================================================== --- sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/GetAcl.java (original) +++ sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/GetAcl.java Tue Mar 28 13:02:40 2017 @@ -20,9 +20,7 @@ package org.apache.sling.jcr.jackrabbit. 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; } Modified: sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/GetEffectiveAcl.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/GetEffectiveAcl.java?rev=1789115&r1=1789114&r2=1789115&view=diff ============================================================================== --- sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/GetEffectiveAcl.java (original) +++ sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/GetEffectiveAcl.java Tue Mar 28 13:02:40 2017 @@ -20,9 +20,7 @@ package org.apache.sling.jcr.jackrabbit. 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; } Modified: sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/package-info.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/package-info.java?rev=1789115&r1=1789114&r2=1789115&view=diff ============================================================================== --- sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/package-info.java (original) +++ sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/package-info.java Tue Mar 28 13:02:40 2017 @@ -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; Modified: sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractGetAclServlet.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractGetAclServlet.java?rev=1789115&r1=1789114&r2=1789115&view=diff ============================================================================== --- sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractGetAclServlet.java (original) +++ sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractGetAclServlet.java Tue Mar 28 13:02:40 2017 @@ -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.SlingHttpSer 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 AbstractGetAclServ 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 AbstractGetAclServ } } - 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 AbstractGetAclServ } @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 AbstractGetAclServ } } - 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; } /** Modified: sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetAclServlet.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetAclServlet.java?rev=1789115&r1=1789114&r2=1789115&view=diff ============================================================================== --- sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetAclServlet.java (original) +++ sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetAclServlet.java Tue Mar 28 13:02:40 2017 @@ -25,10 +25,9 @@ import javax.jcr.security.AccessControlE 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 Abstr /* (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); } Modified: sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetEffectiveAclServlet.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetEffectiveAclServlet.java?rev=1789115&r1=1789114&r2=1789115&view=diff ============================================================================== --- sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetEffectiveAclServlet.java (original) +++ sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetEffectiveAclServlet.java Tue Mar 28 13:02:40 2017 @@ -25,10 +25,9 @@ import javax.jcr.security.AccessControlE 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 exte /* (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); } Modified: sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/package-info.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/package-info.java?rev=1789115&r1=1789114&r2=1789115&view=diff ============================================================================== --- sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/package-info.java (original) +++ sling/trunk/bundles/jcr/jackrabbit-accessmanager/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/package-info.java Tue Mar 28 13:02:40 2017 @@ -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;