You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ka...@apache.org on 2013/10/23 09:16:06 UTC
svn commit: r1534933 - in /directory/escimo/trunk:
server/src/main/java/org/apache/directory/scim/rest/GroupService.java
tests/src/test/java/org/apache/directory/scim/UserResourceTest.java
Author: kayyagari
Date: Wed Oct 23 07:16:05 2013
New Revision: 1534933
URL: http://svn.apache.org/r1534933
Log:
path service for Groups
Modified:
directory/escimo/trunk/server/src/main/java/org/apache/directory/scim/rest/GroupService.java
directory/escimo/trunk/tests/src/test/java/org/apache/directory/scim/UserResourceTest.java
Modified: directory/escimo/trunk/server/src/main/java/org/apache/directory/scim/rest/GroupService.java
URL: http://svn.apache.org/viewvc/directory/escimo/trunk/server/src/main/java/org/apache/directory/scim/rest/GroupService.java?rev=1534933&r1=1534932&r2=1534933&view=diff
==============================================================================
--- directory/escimo/trunk/server/src/main/java/org/apache/directory/scim/rest/GroupService.java (original)
+++ directory/escimo/trunk/server/src/main/java/org/apache/directory/scim/rest/GroupService.java Wed Oct 23 07:16:05 2013
@@ -39,6 +39,7 @@ import javax.ws.rs.core.Response.Respons
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriInfo;
+import org.apache.directory.scim.AttributeNotFoundException;
import org.apache.directory.scim.GroupResource;
import org.apache.directory.scim.ProviderService;
import org.apache.directory.scim.RequestContext;
@@ -174,4 +175,46 @@ public class GroupService
return rb.build();
}
+ @PATCH
+ @Produces({MediaType.APPLICATION_JSON})
+ public Response patchGroup( String jsonData, @Context UriInfo uriInfo, @Context HttpHeaders headers )
+ {
+ ResponseBuilder rb = null;
+
+ if( ( jsonData == null ) || ( jsonData.trim().length() == 0 ) )
+ {
+ rb = Response.status( Status.BAD_REQUEST ).entity( "No data is present with the call to " + uriInfo.getAbsolutePath() );
+ return rb.build();
+ }
+
+ LOG.debug( "Data received at the URI {}\n{}", uriInfo.getAbsolutePath(), jsonData );
+
+ try
+ {
+ RequestContext ctx = new RequestContext( provider, uriInfo, headers );
+
+ ServerResource resource = provider.patchGroup( jsonData, ctx );
+
+ if( resource == null )
+ {
+ rb = Response.status( Status.NO_CONTENT );
+ }
+ else
+ {
+ String json = ResourceSerializer.serialize( resource );
+ rb = Response.ok().entity( json );
+ }
+ }
+ catch( AttributeNotFoundException e )
+ {
+ rb = Response.status( Status.NOT_FOUND ).entity( exceptionToStr( e ) );
+ }
+ catch( Exception e )
+ {
+ rb = Response.status( Status.INTERNAL_SERVER_ERROR ).entity( exceptionToStr( e ) );
+ }
+
+ return rb.build();
+ }
+
}
Modified: directory/escimo/trunk/tests/src/test/java/org/apache/directory/scim/UserResourceTest.java
URL: http://svn.apache.org/viewvc/directory/escimo/trunk/tests/src/test/java/org/apache/directory/scim/UserResourceTest.java?rev=1534933&r1=1534932&r2=1534933&view=diff
==============================================================================
--- directory/escimo/trunk/tests/src/test/java/org/apache/directory/scim/UserResourceTest.java (original)
+++ directory/escimo/trunk/tests/src/test/java/org/apache/directory/scim/UserResourceTest.java Wed Oct 23 07:16:05 2013
@@ -22,7 +22,7 @@ package org.apache.directory.scim;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.HashMap;
@@ -30,11 +30,15 @@ import java.util.List;
import java.util.Map;
import org.apache.directory.api.ldap.model.constants.SchemaConstants;
+import org.apache.directory.api.ldap.model.cursor.EntryCursor;
import org.apache.directory.api.ldap.model.entry.Entry;
+import org.apache.directory.api.ldap.model.message.SearchScope;
import org.apache.directory.api.ldap.model.name.Dn;
import org.apache.directory.scim.User.Email;
import org.apache.directory.scim.User.Name;
import org.apache.directory.scim.schema.CoreResource;
+import org.apache.directory.server.core.api.CoreSession;
+import org.apache.directory.server.core.api.LdapCoreSessionConnection;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -203,20 +207,54 @@ public class UserResourceTest
List<Group.Member> members = new ArrayList<Group.Member>();
group.setMembers( members );
- Entry entry = JettyServer.getAdminSession().lookup( new Dn( "uid=admin,ou=system" ), SchemaConstants.ENTRY_UUID_AT );
+ CoreSession session = JettyServer.getAdminSession();
+ LdapCoreSessionConnection conn = new LdapCoreSessionConnection( session );
- Group.Member m1 = new Group.Member();
+ EntryCursor cursor = conn.search( "ou=system", "(objectClass=*)", SearchScope.SUBTREE, SchemaConstants.ALL_ATTRIBUTES_ARRAY );
- String value = entry.get( SchemaConstants.ENTRY_UUID_AT ).getString();
-
- m1.setValue( value );
- m1.set$ref( baseUrl + "/Users/" + value );
-
- members.add( m1 );
+ int count = 0;
+ while( cursor.next() )
+ {
+ Entry entry = cursor.get();
+
+ Group.Member m1 = new Group.Member();
+
+ String value = entry.get( SchemaConstants.ENTRY_UUID_AT ).getString();
+
+ m1.setValue( value );
+ m1.set$ref( baseUrl + "/Users/" + value );
+
+ members.add( m1 );
+ count++;
+ }
Group addedGroup = ( Group ) client.addGroup( group );
assertNotNull( addedGroup );
assertEquals( group.getDisplayName(), addedGroup.getDisplayName() );
assertNotNull( addedGroup.getId() );
+ assertEquals( count, addedGroup.getMembers().size() );
+
+ Group.Member deletedMember = members.get( 0 );
+
+ Group tobePatchedGroup = new Group();
+ tobePatchedGroup.setId( addedGroup.getId() );
+
+ List<Group.Member> patchedMembers = new ArrayList<Group.Member>();
+ tobePatchedGroup.setMembers( patchedMembers );
+
+ deletedMember.setOperation( "delete" );
+ patchedMembers.add( deletedMember );
+
+ client.patchGroup( tobePatchedGroup );
+ Group patchedGroup = ( Group ) client.getGroup( addedGroup.getId() );
+ assertEquals( ( count - 1 ), patchedGroup.getMembers().size() );
+
+ for( Group.Member gm : patchedGroup.getMembers() )
+ {
+ if( gm.getValue().equals( deletedMember.getValue() ) )
+ {
+ fail( "This member shouldn't present" );
+ }
+ }
}
}