SLING-875: New Bundle for a ResourceProvider and Sling Post Operations for interacting with the jackrabbit UserManager 
https://issues.apache.org/jira/browse/SLING-875

git-svn-id: https://svn.apache.org/repos/asf/incubator/sling/trunk@756191 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/AbstractUserManagerTest.java b/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/AbstractUserManagerTest.java
index 2a85006..0dd0ce5 100644
--- a/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/AbstractUserManagerTest.java
+++ b/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/AbstractUserManagerTest.java
@@ -55,6 +55,7 @@
         URL baseUrl = new URL(HTTP_BASE_URL);
         AuthScope authScope = new AuthScope(baseUrl.getHost(), baseUrl.getPort(), AuthScope.ANY_REALM);
         post.setDoAuthentication(true);
+        Credentials oldCredentials = httpClient.getState().getCredentials(authScope);
         try {
 			httpClient.getState().setCredentials(authScope, creds);
 	        
@@ -70,7 +71,7 @@
 	            assertEquals(assertMessage, expectedStatusCode, status);
 	        }
         } finally {
-        	httpClient.getState().setCredentials(authScope, null);
+        	httpClient.getState().setCredentials(authScope, oldCredentials);
         }
     }
 
@@ -81,6 +82,7 @@
         AuthScope authScope = new AuthScope(baseUrl.getHost(), baseUrl.getPort(), AuthScope.ANY_REALM);
         GetMethod getMethod = new GetMethod(urlString);
         getMethod.setDoAuthentication(true);
+        Credentials oldCredentials = httpClient.getState().getCredentials(authScope);
     	try {
 			httpClient.getState().setCredentials(authScope, creds);
 
@@ -91,7 +93,7 @@
                 assertEquals(assertMessage, expectedStatusCode, status);
             }
     	} finally {
-        	httpClient.getState().setCredentials(authScope, null);
+        	httpClient.getState().setCredentials(authScope, oldCredentials);
     	}
     }
 
@@ -106,6 +108,7 @@
         URL baseUrl = new URL(HTTP_BASE_URL);
         AuthScope authScope = new AuthScope(baseUrl.getHost(), baseUrl.getPort(), AuthScope.ANY_REALM);
         get.setDoAuthentication(true);
+        Credentials oldCredentials = httpClient.getState().getCredentials(authScope);
     	try {
 			httpClient.getState().setCredentials(authScope, creds);
 			
@@ -146,7 +149,7 @@
 	        return content.toString();
 			
     	} finally {
-        	httpClient.getState().setCredentials(authScope, null);
+        	httpClient.getState().setCredentials(authScope, oldCredentials);
     	}
     }
     
@@ -154,11 +157,10 @@
     protected static int counter = 1;
     
 	protected String createTestUser() throws IOException {
-        String postUrl = HTTP_BASE_URL + "/system/userManager/user/";
+        String postUrl = HTTP_BASE_URL + "/system/userManager/user.create.html";
 
 		String testUserId = "testUser" + (counter++);
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "createUser"));
 		postParams.add(new NameValuePair(":name", testUserId));
 		postParams.add(new NameValuePair("pwd", "testPwd"));
 		postParams.add(new NameValuePair("pwdConfirm", "testPwd"));
@@ -168,11 +170,10 @@
 	}
     
 	protected String createTestGroup() throws IOException {
-        String postUrl = HTTP_BASE_URL + "/system/userManager/group/";
+        String postUrl = HTTP_BASE_URL + "/system/userManager/group.create.html";
 
 		String testGroupId = "testGroup" + (counter++);
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "createGroup"));
 		postParams.add(new NameValuePair(":name", testGroupId));
 		
 		//success would be a redirect to the welcome page of the webapp
diff --git a/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/CreateGroupTest.java b/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/CreateGroupTest.java
index 63b7f3f..3075211 100644
--- a/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/CreateGroupTest.java
+++ b/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/CreateGroupTest.java
@@ -39,9 +39,8 @@
 	protected void tearDown() throws Exception {
 		if (testGroupId != null) {
 			//remove the test group if it exists.
-			String postUrl = HTTP_BASE_URL + "/system/userManager/group/" + testGroupId;
+			String postUrl = HTTP_BASE_URL + "/system/userManager/group/" + testGroupId + ".delete.html";
 			List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-			postParams.add(new NameValuePair(":operation", "deleteAuthorizable"));
 			assertAuthenticatedAdminPostStatus(postUrl, HttpServletResponse.SC_OK, postParams, null);
 		}
 
@@ -49,11 +48,10 @@
 	}
 
 	public void testCreateGroup() throws IOException, JSONException {
-        String postUrl = HTTP_BASE_URL + "/system/userManager/group/";
+        String postUrl = HTTP_BASE_URL + "/system/userManager/group.create.html";
 
 		testGroupId = "testGroup" + (counter++);
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "createGroup"));
 		postParams.add(new NameValuePair(":name", testGroupId));
 		assertAuthenticatedAdminPostStatus(postUrl, HttpServletResponse.SC_OK, postParams, null);
 		
@@ -67,19 +65,17 @@
 	}
 
 	public void testCreateGroupMissingGroupId() throws IOException {
-        String postUrl = HTTP_BASE_URL + "/system/userManager/group/";
+        String postUrl = HTTP_BASE_URL + "/system/userManager/group.create.html";
 
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "createGroup"));
 		assertAuthenticatedAdminPostStatus(postUrl, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, postParams, null);
 	}
 
 	public void testCreateGroupAlreadyExists() throws IOException {
-        String postUrl = HTTP_BASE_URL + "/system/userManager/group/";
+        String postUrl = HTTP_BASE_URL + "/system/userManager/group.create.html";
 
 		testGroupId = "testGroup" + (counter++);
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "createGroup"));
 		postParams.add(new NameValuePair(":name", testGroupId));
 		assertAuthenticatedAdminPostStatus(postUrl, HttpServletResponse.SC_OK, postParams, null);
 		
@@ -88,11 +84,10 @@
 	}
 	
 	public void testCreateGroupWithExtraProperties() throws IOException, JSONException {
-        String postUrl = HTTP_BASE_URL + "/system/userManager/group/";
+        String postUrl = HTTP_BASE_URL + "/system/userManager/group.create.html";
 
 		testGroupId = "testGroup" + (counter++);
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "createGroup"));
 		postParams.add(new NameValuePair(":name", testGroupId));
 		postParams.add(new NameValuePair("displayName", "My Test Group"));
 		postParams.add(new NameValuePair("url", "http://www.apache.org"));
diff --git a/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/CreateUserTest.java b/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/CreateUserTest.java
index 890797e..2fcdc93 100644
--- a/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/CreateUserTest.java
+++ b/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/CreateUserTest.java
@@ -39,17 +39,15 @@
 	protected void tearDown() throws Exception {
 		if (testUserId != null) {
 			//remove the test user if it exists.
-			String postUrl = HTTP_BASE_URL + "/system/userManager/user/" + testUserId;
+			String postUrl = HTTP_BASE_URL + "/system/userManager/user/" + testUserId + ".delete.html";
 			List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-			postParams.add(new NameValuePair(":operation", "deleteAuthorizable"));
 			assertAuthenticatedAdminPostStatus(postUrl, HttpServletResponse.SC_OK, postParams, null);
 		}
 		super.tearDown();
 	}
 
 	/*
-		<form action="/system/userManager/createUser.html" method="POST">
-			<input type="hidden" name=":operation" value="creteUser" />
+		<form action="/system/userManager/user.create.html" method="POST">
 		   <div>Name: <input type="text" name=":name" value="testUser" /></div>
 		   <div>Password: <input type="text" name="pwd" value="testUser" /></div>
 		   <div>Password Confirm: <input type="text" name="pwdConfirm" value="testUser" /></div>
@@ -57,11 +55,10 @@
 		</form>
 	 */
 	public void testCreateUser() throws IOException, JSONException {
-        String postUrl = HTTP_BASE_URL + "/system/userManager/user/";
+        String postUrl = HTTP_BASE_URL + "/system/userManager/user.create.html";
         
 		testUserId = "testUser" + (counter++);
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "createUser"));
 		postParams.add(new NameValuePair(":name", testUserId));
 		postParams.add(new NameValuePair("pwd", "testPwd"));
 		postParams.add(new NameValuePair("pwdConfirm", "testPwd"));
@@ -77,33 +74,29 @@
 		assertFalse(jsonObj.has(":name"));
 		assertFalse(jsonObj.has("pwd"));
 		assertFalse(jsonObj.has("pwdConfirm"));
-		assertFalse(jsonObj.has(":operation"));
 	}
 
 	public void testCreateUserMissingUserId() throws IOException {
-        String postUrl = HTTP_BASE_URL + "/system/userManager/user/";
+        String postUrl = HTTP_BASE_URL + "/system/userManager/user.create.html";
 
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "createUser"));
 		assertPostStatus(postUrl, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, postParams, null);
 	}
 
 	public void testCreateUserMissingPwd() throws IOException {
-        String postUrl = HTTP_BASE_URL + "/system/userManager/user/";
+        String postUrl = HTTP_BASE_URL + "/system/userManager/user.create.html";
 
         String userId = "testUser" + (counter++);
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "createUser"));
 		postParams.add(new NameValuePair(":name", userId));
 		assertPostStatus(postUrl, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, postParams, null);
 	}
 
 	public void testCreateUserWrongConfirmPwd() throws IOException {
-        String postUrl = HTTP_BASE_URL + "/system/userManager/user/";
+        String postUrl = HTTP_BASE_URL + "/system/userManager/user.create.html";
 
         String userId = "testUser" + (counter++);
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "createUser"));
 		postParams.add(new NameValuePair(":name", userId));
 		postParams.add(new NameValuePair("pwd", "testPwd"));
 		postParams.add(new NameValuePair("pwdConfirm", "testPwd2"));
@@ -111,11 +104,10 @@
 	}
 
 	public void testCreateUserUserAlreadyExists() throws IOException {
-        String postUrl = HTTP_BASE_URL + "/system/userManager/user/";
+        String postUrl = HTTP_BASE_URL + "/system/userManager/user.create.html";
 
 		testUserId = "testUser" + (counter++);
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "createUser"));
 		postParams.add(new NameValuePair(":name", testUserId));
 		postParams.add(new NameValuePair("pwd", "testPwd"));
 		postParams.add(new NameValuePair("pwdConfirm", "testPwd"));
@@ -126,8 +118,7 @@
 	}
 	
 	/*
-	<form action="/system/userManager/createUser.html" method="POST">
-	    <input type="hidden" name=":operation" value="creteUser" />
+	<form action="/system/userManager/user.create.html" method="POST">
 	   <div>Name: <input type="text" name=":name" value="testUser" /></div>
 	   <div>Password: <input type="text" name="pwd" value="testUser" /></div>
 	   <div>Password Confirm: <input type="text" name="pwdConfirm" value="testUser" /></div>
@@ -137,11 +128,10 @@
 	</form>
 	*/
 	public void testCreateUserWithExtraProperties() throws IOException, JSONException {
-        String postUrl = HTTP_BASE_URL + "/system/userManager/user/";
+        String postUrl = HTTP_BASE_URL + "/system/userManager/user.create.html";
 
 		testUserId = "testUser" + (counter++);
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "createUser"));
 		postParams.add(new NameValuePair(":name", testUserId));
 		postParams.add(new NameValuePair("pwd", "testPwd"));
 		postParams.add(new NameValuePair("pwdConfirm", "testPwd"));
@@ -161,6 +151,5 @@
 		assertFalse(jsonObj.has(":name"));
 		assertFalse(jsonObj.has("pwd"));
 		assertFalse(jsonObj.has("pwdConfirm"));
-		assertFalse(jsonObj.has(":operation"));
 	}		
 }
diff --git a/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/RemoveAuthorizablesTest.java b/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/RemoveAuthorizablesTest.java
index 843f070..35b7172 100644
--- a/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/RemoveAuthorizablesTest.java
+++ b/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/RemoveAuthorizablesTest.java
@@ -39,9 +39,8 @@
 		String getUrl = HTTP_BASE_URL + "/system/userManager/user/" + userId + ".json";
 		assertAuthenticatedHttpStatus(creds, getUrl, HttpServletResponse.SC_OK, null); //make sure the profile request returns some data
 
-		String postUrl = HTTP_BASE_URL + "/system/userManager/user/" + userId;
+		String postUrl = HTTP_BASE_URL + "/system/userManager/user/" + userId + ".delete.html";
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "deleteAuthorizable"));
 		assertAuthenticatedPostStatus(creds, postUrl, HttpServletResponse.SC_OK, postParams, null);
 		
 		getUrl = HTTP_BASE_URL + "/system/userManager/user/" + userId + ".json";
@@ -56,9 +55,8 @@
 		String getUrl = HTTP_BASE_URL + "/system/userManager/group/" + groupId + ".json";
 		assertAuthenticatedHttpStatus(creds, getUrl, HttpServletResponse.SC_OK, null); //make sure the profile request returns some data
 
-		String postUrl = HTTP_BASE_URL + "/system/userManager/group/" + groupId;
+		String postUrl = HTTP_BASE_URL + "/system/userManager/group/" + groupId + ".delete.html";
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "deleteAuthorizable"));
 		assertAuthenticatedPostStatus(creds, postUrl, HttpServletResponse.SC_OK, postParams, null);
 		
 		getUrl = HTTP_BASE_URL + "/system/userManager/group/" + groupId + ".json";
@@ -77,9 +75,8 @@
 		getUrl = HTTP_BASE_URL + "/system/userManager/group/" + groupId + ".json";
 		assertAuthenticatedHttpStatus(creds, getUrl, HttpServletResponse.SC_OK, null); //make sure the profile request returns some data
 		
-		String postUrl = HTTP_BASE_URL + "/system/userManager";
+		String postUrl = HTTP_BASE_URL + "/system/userManager.delete.html";
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "deleteAuthorizable"));
 		postParams.add(new NameValuePair(":applyTo", "group/" + groupId));
 		postParams.add(new NameValuePair(":applyTo", "user/" + userId));
 		assertAuthenticatedPostStatus(creds, postUrl, HttpServletResponse.SC_OK, postParams, null);
diff --git a/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/UpdateGroupTest.java b/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/UpdateGroupTest.java
index c9b7617..41f9d71 100644
--- a/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/UpdateGroupTest.java
+++ b/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/UpdateGroupTest.java
@@ -40,9 +40,8 @@
 	protected void tearDown() throws Exception {
 		if (testGroupId != null) {
 			//remove the test user if it exists.
-			String postUrl = HTTP_BASE_URL + "/system/userManager/group/" + testGroupId;
+			String postUrl = HTTP_BASE_URL + "/system/userManager/group/" + testGroupId + ".delete.html";
 			List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-			postParams.add(new NameValuePair(":operation", "deleteAuthorizable"));
 			assertAuthenticatedAdminPostStatus(postUrl, HttpServletResponse.SC_OK, postParams, null);
 		}
 
@@ -52,10 +51,9 @@
 	public void testUpdateGroup() throws IOException, JSONException {
 		testGroupId = createTestGroup();
 		
-        String postUrl = HTTP_BASE_URL + "/system/userManager/group/" + testGroupId;
+        String postUrl = HTTP_BASE_URL + "/system/userManager/group/" + testGroupId + ".update.html";
 
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "updateAuthorizable"));
 		postParams.add(new NameValuePair("displayName", "My Updated Test Group"));
 		postParams.add(new NameValuePair("url", "http://www.apache.org/updated"));
 		
@@ -70,17 +68,15 @@
 		JSONObject jsonObj = new JSONObject(json);
 		assertEquals("My Updated Test Group", jsonObj.getString("displayName"));
 		assertEquals("http://www.apache.org/updated", jsonObj.getString("url"));
-		assertFalse(jsonObj.has(":operation"));
 	}
 	
 	public void testUpdateGroupMembers() throws IOException, JSONException {
 		testGroupId = createTestGroup();
 		
-        String postUrl = HTTP_BASE_URL + "/system/userManager/group/" + testGroupId;
+        String postUrl = HTTP_BASE_URL + "/system/userManager/group/" + testGroupId + ".update.html";
 
         //TODO: verify this works....
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "updateAuthorizable"));
 		postParams.add(new NameValuePair(":member", "../user/testUser"));
 		postParams.add(new NameValuePair(":member@Delete", "testGroup"));
 		
diff --git a/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/UpdateUserTest.java b/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/UpdateUserTest.java
index 2686adb..cd40386 100644
--- a/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/UpdateUserTest.java
+++ b/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/userManager/UpdateUserTest.java
@@ -40,9 +40,8 @@
 	protected void tearDown() throws Exception {
 		if (testUserId != null) {
 			//remove the test user if it exists.
-			String postUrl = HTTP_BASE_URL + "/system/userManager/user/" + testUserId;
+			String postUrl = HTTP_BASE_URL + "/system/userManager/user/" + testUserId + ".delete.html";
 			List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-			postParams.add(new NameValuePair(":operation", "updateAuthorizable"));
 			assertAuthenticatedAdminPostStatus(postUrl, HttpServletResponse.SC_OK, postParams, null);
 		}
 
@@ -52,10 +51,9 @@
 	public void testUpdateUser() throws IOException, JSONException {
 		testUserId = createTestUser();
 		
-        String postUrl = HTTP_BASE_URL + "/system/userManager/user/" + testUserId;
+        String postUrl = HTTP_BASE_URL + "/system/userManager/user/" + testUserId + ".update.html";
 
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "updateAuthorizable"));
 		postParams.add(new NameValuePair("displayName", "My Updated Test User"));
 		postParams.add(new NameValuePair("url", "http://www.apache.org/updated"));
 		Credentials creds = new UsernamePasswordCredentials(testUserId, "testPwd");
@@ -69,16 +67,14 @@
 		JSONObject jsonObj = new JSONObject(json);
 		assertEquals("My Updated Test User", jsonObj.getString("displayName"));
 		assertEquals("http://www.apache.org/updated", jsonObj.getString("url"));
-		assertFalse(jsonObj.has(":operation"));
 	}
 	
 	public void testChangeUserPassword() throws IOException {
 		testUserId = createTestUser();
 		
-        String postUrl = HTTP_BASE_URL + "/system/userManager/user/" + testUserId;
+        String postUrl = HTTP_BASE_URL + "/system/userManager/user/" + testUserId + ".changePassword.html";
 
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "changePassword"));
 		postParams.add(new NameValuePair("oldPwd", "testPwd"));
 		postParams.add(new NameValuePair("newPwd", "testNewPwd"));
 		postParams.add(new NameValuePair("newPwdConfirm", "testNewPwd"));
@@ -90,10 +86,9 @@
 	public void testChangeUserPasswordWrongOldPwd() throws IOException {
 		testUserId = createTestUser();
 		
-        String postUrl = HTTP_BASE_URL + "/system/userManager/user/" + testUserId;
+        String postUrl = HTTP_BASE_URL + "/system/userManager/user/" + testUserId + ".changePassword.html";
 
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "changePassword"));
 		postParams.add(new NameValuePair("oldPwd", "wrongTestPwd"));
 		postParams.add(new NameValuePair("newPwd", "testNewPwd"));
 		postParams.add(new NameValuePair("newPwdConfirm", "testNewPwd"));
@@ -106,10 +101,9 @@
 	public void testChangeUserPasswordWrongConfirmPwd() throws IOException {
 		testUserId = createTestUser();
 		
-        String postUrl = HTTP_BASE_URL + "/system/userManager/user/" + testUserId;
+        String postUrl = HTTP_BASE_URL + "/system/userManager/user/" + testUserId + ".changePassword.html";
 
 		List<NameValuePair> postParams = new ArrayList<NameValuePair>();
-		postParams.add(new NameValuePair(":operation", "changePassword"));
 		postParams.add(new NameValuePair("oldPwd", "testPwd"));
 		postParams.add(new NameValuePair("newPwd", "testNewPwd"));
 		postParams.add(new NameValuePair("newPwdConfirm", "wrongTestNewPwd"));