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/08/14 16:46:25 UTC
svn commit: r1513911 - in /directory/escimo/trunk:
common/src/main/java/org/apache/directory/scim/
common/src/main/java/org/apache/directory/scim/json/
ldap/src/main/java/org/apache/directory/scim/ldap/
ldap/src/main/java/org/apache/directory/scim/ldap...
Author: kayyagari
Date: Wed Aug 14 14:46:24 2013
New Revision: 1513911
URL: http://svn.apache.org/r1513911
Log:
o support for Groups service
o a bit of refactoring
Added:
directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/CoreResource.java
directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/Group.java
directory/escimo/trunk/server/src/main/java/org/apache/directory/scim/rest/GroupService.java
Modified:
directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/ProviderService.java
directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/RequestContext.java
directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/User.java
directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/json/ResourceSerializer.java
directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/LdapResourceProvider.java
directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/LdapSchemaMapper.java
directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/ActiveAttributeHandler.java
directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/GroupsAttributeHandler.java
directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/MembersAttributeHandler.java
directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/MetaAttributeHandler.java
directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/PhotosAttributeHandler.java
directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/schema/ResourceSchema.java
directory/escimo/trunk/ldap/src/main/resources/escimo-ldap-mapping.xml
directory/escimo/trunk/server/src/main/java/org/apache/directory/scim/rest/EscimoApplication.java
Added: directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/CoreResource.java
URL: http://svn.apache.org/viewvc/directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/CoreResource.java?rev=1513911&view=auto
==============================================================================
--- directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/CoreResource.java (added)
+++ directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/CoreResource.java Wed Aug 14 14:46:24 2013
@@ -0,0 +1,65 @@
+/*
+ * 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.
+ *
+ */
+package org.apache.directory.scim;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * TODO CoreResource.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public abstract class CoreResource
+{
+ private Map<String,List<AbstractAttribute>> uriAtMap = new HashMap<String, List<AbstractAttribute>>();
+
+ private String id;
+
+ public void addAttribute( String uri, AbstractAttribute at )
+ {
+ List<AbstractAttribute> atList = uriAtMap.get( uri );
+
+ if( atList == null )
+ {
+ atList = new ArrayList<AbstractAttribute>();
+ uriAtMap.put( uri, atList );
+ }
+
+ atList.add( at );
+ }
+
+ public Map<String,List<AbstractAttribute>> getAttributes()
+ {
+ return uriAtMap;
+ }
+
+ public void setId( String id )
+ {
+ this.id = id;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+}
Added: directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/Group.java
URL: http://svn.apache.org/viewvc/directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/Group.java?rev=1513911&view=auto
==============================================================================
--- directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/Group.java (added)
+++ directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/Group.java Wed Aug 14 14:46:24 2013
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ *
+ */
+package org.apache.directory.scim;
+
+
+/**
+ * TODO Group.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class Group extends CoreResource
+{
+ @Override
+ public String toString()
+ {
+ return "Group [attributes=" + super.getAttributes() + "]";
+ }
+
+}
Modified: directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/ProviderService.java
URL: http://svn.apache.org/viewvc/directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/ProviderService.java?rev=1513911&r1=1513910&r2=1513911&view=diff
==============================================================================
--- directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/ProviderService.java (original)
+++ directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/ProviderService.java Wed Aug 14 14:46:24 2013
@@ -33,4 +33,6 @@ public interface ProviderService
User getUser( RequestContext ctx, String userId ) throws ResourceNotFoundException;
InputStream getUserPhoto( String id, String atName ) throws MissingParameterException;
+
+ Group getGroup( RequestContext ctx, String groupId ) throws ResourceNotFoundException;
}
Modified: directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/RequestContext.java
URL: http://svn.apache.org/viewvc/directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/RequestContext.java?rev=1513911&r1=1513910&r2=1513911&view=diff
==============================================================================
--- directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/RequestContext.java (original)
+++ directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/RequestContext.java Wed Aug 14 14:46:24 2013
@@ -34,7 +34,7 @@ public class RequestContext
private UriInfo uriInfo;
- private User user;
+ private CoreResource resource;
public RequestContext( ProviderService providerService )
@@ -43,15 +43,15 @@ public class RequestContext
}
- public User getUser()
+ public CoreResource getCoreResource()
{
- return user;
+ return resource;
}
- public void setUser( User user )
+ public void setCoreResource( CoreResource resource )
{
- this.user = user;
+ this.resource = resource;
}
Modified: directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/User.java
URL: http://svn.apache.org/viewvc/directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/User.java?rev=1513911&r1=1513910&r2=1513911&view=diff
==============================================================================
--- directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/User.java (original)
+++ directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/User.java Wed Aug 14 14:46:24 2013
@@ -19,54 +19,18 @@
*/
package org.apache.directory.scim;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
/**
* TODO User.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class User
+public class User extends CoreResource
{
- private Map<String,List<AbstractAttribute>> uriAtMap = new HashMap<String, List<AbstractAttribute>>();
-
- private String id;
-
- public void addAttribute( String uri, AbstractAttribute at )
- {
- List<AbstractAttribute> atList = uriAtMap.get( uri );
-
- if( atList == null )
- {
- atList = new ArrayList<AbstractAttribute>();
- uriAtMap.put( uri, atList );
- }
-
- atList.add( at );
- }
-
- public Map<String,List<AbstractAttribute>> getAttributes()
- {
- return uriAtMap;
- }
-
- public void setId( String id )
- {
- this.id = id;
- }
-
- public String getId()
- {
- return id;
- }
-
@Override
public String toString()
{
- return "User [uriAtMap=" + uriAtMap + "]";
+ return "User [attributes=" + super.getAttributes() + "]";
}
}
Modified: directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/json/ResourceSerializer.java
URL: http://svn.apache.org/viewvc/directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/json/ResourceSerializer.java?rev=1513911&r1=1513910&r2=1513911&view=diff
==============================================================================
--- directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/json/ResourceSerializer.java (original)
+++ directory/escimo/trunk/common/src/main/java/org/apache/directory/scim/json/ResourceSerializer.java Wed Aug 14 14:46:24 2013
@@ -25,6 +25,8 @@ import java.util.Map;
import org.apache.directory.scim.AbstractAttribute;
import org.apache.directory.scim.ComplexAttribute;
+import org.apache.directory.scim.CoreResource;
+import org.apache.directory.scim.Group;
import org.apache.directory.scim.MultiValAttribute;
import org.apache.directory.scim.SimpleAttribute;
import org.apache.directory.scim.SimpleAttributeGroup;
@@ -43,31 +45,44 @@ import com.google.gson.JsonPrimitive;
public class ResourceSerializer
{
public static final String CORE_URI = "urn:scim:schemas:core:1.0";
-
+
+
public static String serialize( User user )
{
+ return _serialize( user );
+ }
+
+
+ public static String serialize( Group group )
+ {
+ return _serialize( group );
+ }
+
+
+ private static String _serialize( CoreResource resource )
+ {
JsonObject root = new JsonObject();
- Map<String, List<AbstractAttribute>> attributes = user.getAttributes();
-
+ Map<String, List<AbstractAttribute>> attributes = resource.getAttributes();
+
JsonArray schemas = new JsonArray();
root.add( "schemas", schemas );
-
+
for ( String uri : attributes.keySet() )
{
schemas.add( new JsonPrimitive( uri ) );
-
+
JsonObject parent = root;
-
- if( !uri.equals( CORE_URI ) )
+
+ if ( !uri.equals( CORE_URI ) )
{
parent = new JsonObject();
root.add( uri, parent );
}
-
+
serialize( parent, attributes.get( uri ) );
}
-
+
return root.toString();
}
@@ -91,31 +106,31 @@ public class ResourceSerializer
{
ComplexAttribute ct = ( ComplexAttribute ) at;
JsonObject json = new JsonObject();
- for( SimpleAttribute t : ct.getAtList() )
+ for ( SimpleAttribute t : ct.getAtList() )
{
serializeSimpleAt( json, t );
}
-
+
parent.add( ct.getName(), json );
}
else if ( at instanceof MultiValAttribute )
{
MultiValAttribute mv = ( MultiValAttribute ) at;
List<SimpleAttributeGroup> lstGrp = mv.getAtGroupList();
-
+
JsonArray array = new JsonArray();
-
- for( SimpleAttributeGroup stg : lstGrp )
+
+ for ( SimpleAttributeGroup stg : lstGrp )
{
JsonObject json = new JsonObject();
- for( SimpleAttribute t : stg.getAtList() )
+ for ( SimpleAttribute t : stg.getAtList() )
{
serializeSimpleAt( json, t );
}
-
+
array.add( json );
}
-
+
parent.add( mv.getName(), array );
}
}
Modified: directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/LdapResourceProvider.java
URL: http://svn.apache.org/viewvc/directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/LdapResourceProvider.java?rev=1513911&r1=1513910&r2=1513911&view=diff
==============================================================================
--- directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/LdapResourceProvider.java (original)
+++ directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/LdapResourceProvider.java Wed Aug 14 14:46:24 2013
@@ -34,7 +34,6 @@ import java.util.Properties;
import org.apache.directory.api.ldap.codec.standalone.StandaloneLdapApiService;
import org.apache.directory.api.ldap.model.constants.SchemaConstants;
-import org.apache.directory.api.ldap.model.cursor.CursorException;
import org.apache.directory.api.ldap.model.cursor.EntryCursor;
import org.apache.directory.api.ldap.model.cursor.SearchCursor;
import org.apache.directory.api.ldap.model.entry.Attribute;
@@ -63,6 +62,8 @@ import org.apache.directory.ldap.client.
import org.apache.directory.ldap.client.api.LdapNetworkConnection;
import org.apache.directory.scim.AttributeHandler;
import org.apache.directory.scim.ComplexAttribute;
+import org.apache.directory.scim.CoreResource;
+import org.apache.directory.scim.Group;
import org.apache.directory.scim.MissingParameterException;
import org.apache.directory.scim.MultiValAttribute;
import org.apache.directory.scim.ProviderService;
@@ -73,7 +74,9 @@ import org.apache.directory.scim.SimpleA
import org.apache.directory.scim.User;
import org.apache.directory.scim.json.ResourceSerializer;
import org.apache.directory.scim.ldap.schema.ComplexType;
+import org.apache.directory.scim.ldap.schema.GroupSchema;
import org.apache.directory.scim.ldap.schema.MultiValType;
+import org.apache.directory.scim.ldap.schema.ResourceSchema;
import org.apache.directory.scim.ldap.schema.SimpleType;
import org.apache.directory.scim.ldap.schema.SimpleTypeGroup;
import org.apache.directory.scim.ldap.schema.TypedType;
@@ -93,10 +96,12 @@ public class LdapResourceProvider implem
{
private LdapConnection connection;
- private LdapSchemaMapper schema;
+ private LdapSchemaMapper schemaMapper;
private UserSchema userSchema;
+ private GroupSchema groupSchema;
+
private static final Logger LOG = LoggerFactory.getLogger( LdapResourceProvider.class );
@@ -124,16 +129,17 @@ public class LdapResourceProvider implem
( ( LdapNetworkConnection ) connection ).loadSchema( new JarLdifSchemaLoader() );
}
- schema = new LdapSchemaMapper();
- schema.loadMappings();
- userSchema = schema.getUserSchema();
+ schemaMapper = new LdapSchemaMapper();
+ schemaMapper.loadMappings();
+ userSchema = schemaMapper.getUserSchema();
+ groupSchema = schemaMapper.getGroupSchema();
}
public void stop()
{
LOG.info( "Closing the LDAP server connection" );
-
+
if ( connection != null )
{
try
@@ -151,7 +157,7 @@ public class LdapResourceProvider implem
private void createConnection() throws IOException, LdapException
{
LOG.info( "Creating LDAP server connection" );
-
+
InputStream in = this.getClass().getClassLoader().getResourceAsStream( "ldap-server.properties" );
Properties prop = new Properties();
prop.load( in );
@@ -177,7 +183,7 @@ public class LdapResourceProvider implem
public User getUser( RequestContext ctx, String id ) throws ResourceNotFoundException
{
- Entry entry = fetchEntryById( id );
+ Entry entry = fetchEntryById( id, userSchema );
if ( entry == null )
{
@@ -198,61 +204,102 @@ public class LdapResourceProvider implem
@Override
public InputStream getUserPhoto( String id, String atName ) throws MissingParameterException
{
- if( Strings.isEmpty( id ) )
+ if ( Strings.isEmpty( id ) )
{
throw new MissingParameterException( "id cannot be null or empty" );
}
-
- if( Strings.isEmpty( atName ) )
+
+ if ( Strings.isEmpty( atName ) )
{
throw new MissingParameterException( "atName cannot be null or empty" );
}
- Entry entry = fetchEntryById( id );
-
- if( entry == null )
+ Entry entry = fetchEntryById( id, userSchema );
+
+ if ( entry == null )
{
return null;
}
-
+
Attribute phtoAt = entry.get( atName );
-
- if( phtoAt == null )
+
+ if ( phtoAt == null )
{
return null;
}
-
+
ByteArrayInputStream bin = new ByteArrayInputStream( phtoAt.get().getBytes() );
-
+
return bin;
}
- public User toUser( RequestContext ctx, Entry entry ) throws Exception
+ @Override
+ public Group getGroup( RequestContext ctx, String groupId ) throws ResourceNotFoundException
{
+ Entry entry = fetchEntryById( groupId, groupSchema );
+
+ if ( entry == null )
+ {
+ throw new ResourceNotFoundException( "No Group resource found with the ID " + groupId );
+ }
+
+ try
+ {
+ return toGroup( ctx, entry );
+ }
+ catch ( Exception e )
+ {
+ throw new ResourceNotFoundException( e );
+ }
+
+ }
+
+ public User toUser( RequestContext ctx, Entry entry ) throws Exception
+ {
User user = new User();
- ctx.setUser( user );
-
+ ctx.setCoreResource( user );
+
+ _loadCoreResource( ctx, entry, userSchema );
+
+ return user;
+ }
+
+
+ public Group toGroup( RequestContext ctx, Entry entry ) throws Exception
+ {
+ Group group = new Group();
+ ctx.setCoreResource( group );
+
+ _loadCoreResource( ctx, entry, groupSchema );
+
+ return group;
+ }
+
+
+ private void _loadCoreResource( RequestContext ctx, Entry entry, ResourceSchema resourceSchema ) throws Exception
+ {
+ CoreResource resource = ctx.getCoreResource();
+
// first fill in the id, we need this for deriving location
- SimpleType idType = ( SimpleType ) userSchema.getCoreAttribute( "id" );
+ SimpleType idType = ( SimpleType ) resourceSchema.getCoreAttribute( "id" );
SimpleAttribute idAttribute = getValueForSimpleType( idType, entry, ctx );
- user.addAttribute( idType.getUri(), idAttribute );
-
- user.setId( ( String ) idAttribute.getValue() );
-
- _loadAttributes( ctx, entry, userSchema.getCoreTypes(), idType );
- _loadAttributes( ctx, entry, userSchema.getExtendedTypes(), idType );
-
- return user;
+ resource.addAttribute( idType.getUri(), idAttribute );
+
+ resource.setId( ( String ) idAttribute.getValue() );
+
+ _loadAttributes( ctx, entry, resourceSchema.getCoreTypes(), idType );
+ _loadAttributes( ctx, entry, resourceSchema.getExtendedTypes(), idType );
}
-
-
- private User _loadAttributes( RequestContext ctx, Entry entry, Collection<BaseType> types, SimpleType idType ) throws Exception
+
+
+ private void _loadAttributes( RequestContext ctx, Entry entry, Collection<BaseType> types, SimpleType idType )
+ throws Exception
{
- User user = ctx.getUser();
-
+ CoreResource user = ctx.getCoreResource();
+
for ( BaseType bt : types )
{
if ( bt instanceof SimpleType )
@@ -265,11 +312,11 @@ public class LdapResourceProvider implem
}
// skip id attribute, it was already added above
- if( st == idType )
+ if ( st == idType )
{
continue;
}
-
+
SimpleAttribute at = getValueForSimpleType( st, entry, ctx );
if ( at != null )
{
@@ -286,8 +333,8 @@ public class LdapResourceProvider implem
}
String atHandler = ct.getAtHandlerName();
-
- if( atHandler != null )
+
+ if ( atHandler != null )
{
AttributeHandler handler = userSchema.getHandler( atHandler );
handler.handle( ct, entry, ctx );
@@ -312,8 +359,8 @@ public class LdapResourceProvider implem
}
String atHandler = bt.getAtHandlerName();
-
- if( atHandler != null )
+
+ if ( atHandler != null )
{
AttributeHandler handler = userSchema.getHandler( atHandler );
handler.handle( bt, entry, ctx );
@@ -360,8 +407,6 @@ public class LdapResourceProvider implem
}
}
}
-
- return user;
}
@@ -426,8 +471,8 @@ public class LdapResourceProvider implem
public SimpleAttribute getValueForSimpleType( SimpleType st, Entry entry, RequestContext ctx ) throws LdapException
{
String atHandler = st.getAtHandlerName();
-
- if( atHandler != null )
+
+ if ( atHandler != null )
{
AttributeHandler handler = userSchema.getHandler( atHandler );
handler.handle( st, entry, ctx );
@@ -438,7 +483,8 @@ public class LdapResourceProvider implem
return getValueForSimpleType( st, entry );
}
}
-
+
+
public SimpleAttribute getValueForSimpleType( SimpleType st, Entry entry ) throws LdapException
{
String name = st.getName();
@@ -489,29 +535,28 @@ public class LdapResourceProvider implem
}
+ // public List<SimpleAttribute> getValuesInto( SimpleTypeGroup stg, RequestContext ctx ) throws LdapException
+ // {
+ //
+ // }
-// public List<SimpleAttribute> getValuesInto( SimpleTypeGroup stg, RequestContext ctx ) throws LdapException
-// {
-//
-// }
-
public List<SimpleAttribute> getValuesInto( SimpleTypeGroup stg, Entry entry ) throws LdapException
{
List<SimpleAttribute> lstAts = new ArrayList<SimpleAttribute>();
// format="$givenName $familyName"
boolean hasFormat = !Strings.isEmpty( stg.getFormat() );
-
+
String format = stg.getFormat();
-
+
for ( SimpleType st : stg.getLstSTypes() )
{
SimpleAttribute at = getValueForSimpleType( st, entry );
if ( at != null )
{
lstAts.add( at );
-
- if( hasFormat )
+
+ if ( hasFormat )
{
format = format.replaceAll( "\\$" + st.getName(), String.valueOf( at.getValue() ) );
}
@@ -519,12 +564,12 @@ public class LdapResourceProvider implem
}
- if( hasFormat )
+ if ( hasFormat )
{
SimpleAttribute atFormat = new SimpleAttribute( "formatted", format );
lstAts.add( atFormat );
}
-
+
return lstAts;
}
@@ -542,28 +587,29 @@ public class LdapResourceProvider implem
{
return connection.lookup( dn, ALL_ATTRIBUTES_ARRAY );
}
- catch( LdapException e )
+ catch ( LdapException e )
{
LOG.debug( "Couldn't find the entry with dn {}", dn, e );
}
-
+
return null;
}
-
- public Entry fetchEntryById( String id )
+
+
+ public Entry fetchEntryById( String id, ResourceSchema resourceSchema )
{
EntryCursor cursor = null;
-
- SimpleType st = ( SimpleType ) userSchema.getCoreAttribute( "id" );
- String userIdName = st.getMappedTo();
- String filter = "(" + userIdName + "=" + id + ")";
+ SimpleType st = ( SimpleType ) resourceSchema.getCoreAttribute( "id" );
+ String resourceIdName = st.getMappedTo();
+
+ String filter = "(" + resourceIdName + "=" + id + ")";
Entry entry = null;
try
{
- cursor = connection.search( userSchema.getBaseDn(), filter, SUBTREE, ALL_ATTRIBUTES_ARRAY );
+ cursor = connection.search( resourceSchema.getBaseDn(), filter, SUBTREE, ALL_ATTRIBUTES_ARRAY );
if ( cursor.next() )
{
@@ -578,52 +624,40 @@ public class LdapResourceProvider implem
{
cursor.close();
}
-
+
return entry;
}
-
-
+
+
public static void main( String[] args ) throws Exception
{
- System.setProperty( StandaloneLdapApiService.CONTROLS_LIST,
- "org.apache.directory.api.ldap.codec.controls.cascade.CascadeFactory," +
- "org.apache.directory.api.ldap.codec.controls.manageDsaIT.ManageDsaITFactory," +
- "org.apache.directory.api.ldap.codec.controls.search.entryChange.EntryChangeFactory," +
- "org.apache.directory.api.ldap.codec.controls.search.pagedSearch.PagedResultsFactory," +
- "org.apache.directory.api.ldap.codec.controls.search.persistentSearch.PersistentSearchFactory," +
- "org.apache.directory.api.ldap.codec.controls.search.subentries.SubentriesFactory" );
+// System.setProperty( StandaloneLdapApiService.CONTROLS_LIST,
+// "org.apache.directory.api.ldap.codec.controls.cascade.CascadeFactory," +
+// "org.apache.directory.api.ldap.codec.controls.manageDsaIT.ManageDsaITFactory," +
+// "org.apache.directory.api.ldap.codec.controls.search.entryChange.EntryChangeFactory," +
+// "org.apache.directory.api.ldap.codec.controls.search.pagedSearch.PagedResultsFactory," +
+// "org.apache.directory.api.ldap.codec.controls.search.persistentSearch.PersistentSearchFactory," +
+// "org.apache.directory.api.ldap.codec.controls.search.subentries.SubentriesFactory" );
LdapNetworkConnection c = new LdapNetworkConnection( "localhost", 10389 );
c.setTimeOut( Long.MAX_VALUE );
c.bind( "uid=admin,ou=system", "secret" );
- c.loadSchema( new JarLdifSchemaLoader() );
+ //c.loadSchema( new JarLdifSchemaLoader() );
// PersistentSearch ps = new PersistentSearchImpl();
// ps.setChangesOnly( false );
// ps.setReturnECs( true );
- SearchRequest searchRequest = new SearchRequestImpl().setBase( new Dn(
- "uid=kirana,ou=users,dc=signon,dc=mirth,dc=com" ) ).setFilter( "(objectclass=*)" ).setScope(
- SearchScope.OBJECT );
- searchRequest.addAttributes( SchemaConstants.ALL_ATTRIBUTES_ARRAY );
-
- SearchCursor cursor = c.search( searchRequest );
+ EntryCursor cursor = c.search( "", "(entryUUID=7ca31977-ba2d-4cdc-a86d-ba9fba06cd15)", SearchScope.SUBTREE, "*" );
+ System.out.println("searching");
- Entry entry = null;
while ( cursor.next() )
{
- Response response = cursor.get();
- SearchResultEntry se = ( SearchResultEntry ) response;
- entry = se.getEntry();
+ Entry entry = cursor.get();
+ System.out.println( entry );
}
cursor.close();
-
- System.out.println( entry );
- LdapResourceProvider lr = new LdapResourceProvider( c );
- User user = lr.toUser( new RequestContext( lr ), entry );
- System.out.println( user );
- System.out.println( ResourceSerializer.serialize( user ) );
c.close();
}
}
Modified: directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/LdapSchemaMapper.java
URL: http://svn.apache.org/viewvc/directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/LdapSchemaMapper.java?rev=1513911&r1=1513910&r2=1513911&view=diff
==============================================================================
--- directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/LdapSchemaMapper.java (original)
+++ directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/LdapSchemaMapper.java Wed Aug 14 14:46:24 2013
@@ -158,7 +158,7 @@ public class LdapSchemaMapper implements
String groupBaseDn = elmGroup.attributeValue( "baseDn" );
String groupFilter = elmGroup.attributeValue( "filter" );
- groupSchema = new GroupSchema( baseDn, filter );
+ groupSchema = new GroupSchema( groupBaseDn, groupFilter );
List<Element> lstGroupRef = elmGroup.elements( "schemaRef" );
parseResourceSchema( lstGroupRef, lstSchema, groupSchema );
}
Modified: directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/ActiveAttributeHandler.java
URL: http://svn.apache.org/viewvc/directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/ActiveAttributeHandler.java?rev=1513911&r1=1513910&r2=1513911&view=diff
==============================================================================
--- directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/ActiveAttributeHandler.java (original)
+++ directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/ActiveAttributeHandler.java Wed Aug 14 14:46:24 2013
@@ -75,7 +75,7 @@ public class ActiveAttributeHandler impl
st = new SimpleAttribute( bt.getName(), Boolean.TRUE );
}
- ctx.getUser().addAttribute( bt.getUri(), st );
+ ctx.getCoreResource().addAttribute( bt.getUri(), st );
}
}
Modified: directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/GroupsAttributeHandler.java
URL: http://svn.apache.org/viewvc/directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/GroupsAttributeHandler.java?rev=1513911&r1=1513910&r2=1513911&view=diff
==============================================================================
--- directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/GroupsAttributeHandler.java (original)
+++ directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/GroupsAttributeHandler.java Wed Aug 14 14:46:24 2013
@@ -123,7 +123,7 @@ public class GroupsAttributeHandler impl
}
}
- ctx.getUser().addAttribute( bt.getUri(), mv );
+ ctx.getCoreResource().addAttribute( bt.getUri(), mv );
}
}
Modified: directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/MembersAttributeHandler.java
URL: http://svn.apache.org/viewvc/directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/MembersAttributeHandler.java?rev=1513911&r1=1513910&r2=1513911&view=diff
==============================================================================
--- directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/MembersAttributeHandler.java (original)
+++ directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/MembersAttributeHandler.java Wed Aug 14 14:46:24 2013
@@ -102,7 +102,7 @@ public class MembersAttributeHandler imp
if ( !lstAtGroup.isEmpty() )
{
MultiValAttribute mv = new MultiValAttribute( bt.getName(), lstAtGroup );
- ctx.getUser().addAttribute( bt.getUri(), mv );
+ ctx.getCoreResource().addAttribute( bt.getUri(), mv );
}
}
Modified: directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/MetaAttributeHandler.java
URL: http://svn.apache.org/viewvc/directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/MetaAttributeHandler.java?rev=1513911&r1=1513910&r2=1513911&view=diff
==============================================================================
--- directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/MetaAttributeHandler.java (original)
+++ directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/MetaAttributeHandler.java Wed Aug 14 14:46:24 2013
@@ -30,6 +30,7 @@ import org.apache.directory.api.ldap.mod
import org.apache.directory.api.ldap.model.exception.LdapException;
import org.apache.directory.scim.AttributeHandler;
import org.apache.directory.scim.ComplexAttribute;
+import org.apache.directory.scim.CoreResource;
import org.apache.directory.scim.RequestContext;
import org.apache.directory.scim.SimpleAttribute;
import org.apache.directory.scim.User;
@@ -85,7 +86,7 @@ public class MetaAttributeHandler implem
atList.add( lastModified );
}
- User user = ctx.getUser();
+ CoreResource user = ctx.getCoreResource();
SimpleAttribute location = new SimpleAttribute( "location" );
String locationVal = ctx.getUriInfo().getBaseUri().toString();
Modified: directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/PhotosAttributeHandler.java
URL: http://svn.apache.org/viewvc/directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/PhotosAttributeHandler.java?rev=1513911&r1=1513910&r2=1513911&view=diff
==============================================================================
--- directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/PhotosAttributeHandler.java (original)
+++ directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/handlers/PhotosAttributeHandler.java Wed Aug 14 14:46:24 2013
@@ -27,6 +27,7 @@ import org.apache.directory.api.ldap.mod
import org.apache.directory.api.ldap.model.entry.Entry;
import org.apache.directory.api.ldap.model.entry.Value;
import org.apache.directory.scim.AttributeHandler;
+import org.apache.directory.scim.CoreResource;
import org.apache.directory.scim.MultiValAttribute;
import org.apache.directory.scim.RequestContext;
import org.apache.directory.scim.SimpleAttribute;
@@ -62,7 +63,7 @@ public class PhotosAttributeHandler impl
return;
}
- User user = ctx.getUser();
+ CoreResource user = ctx.getCoreResource();
Entry entry = ( Entry ) srcResource;
@@ -126,7 +127,7 @@ public class PhotosAttributeHandler impl
}
- private SimpleAttribute getPhotoUrlValue( SimpleTypeGroup stg, Entry entry, String photoUrlBase, User user )
+ private SimpleAttribute getPhotoUrlValue( SimpleTypeGroup stg, Entry entry, String photoUrlBase, CoreResource user )
{
SimpleType valType = stg.getValueType();
if ( valType != null )
Modified: directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/schema/ResourceSchema.java
URL: http://svn.apache.org/viewvc/directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/schema/ResourceSchema.java?rev=1513911&r1=1513910&r2=1513911&view=diff
==============================================================================
--- directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/schema/ResourceSchema.java (original)
+++ directory/escimo/trunk/ldap/src/main/java/org/apache/directory/scim/ldap/schema/ResourceSchema.java Wed Aug 14 14:46:24 2013
@@ -28,6 +28,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import org.apache.directory.api.util.Strings;
import org.apache.directory.scim.AttributeHandler;
import org.apache.directory.scim.schema.BaseType;
@@ -53,6 +54,11 @@ public abstract class ResourceSchema
public ResourceSchema( String baseDn, String filter )
{
+ if( Strings.isEmpty( baseDn ) )
+ {
+ baseDn = ""; // RootDSE
+ }
+
this.baseDn = baseDn;
this.filter = filter;
}
Modified: directory/escimo/trunk/ldap/src/main/resources/escimo-ldap-mapping.xml
URL: http://svn.apache.org/viewvc/directory/escimo/trunk/ldap/src/main/resources/escimo-ldap-mapping.xml?rev=1513911&r1=1513910&r2=1513911&view=diff
==============================================================================
--- directory/escimo/trunk/ldap/src/main/resources/escimo-ldap-mapping.xml (original)
+++ directory/escimo/trunk/ldap/src/main/resources/escimo-ldap-mapping.xml Wed Aug 14 14:46:24 2013
@@ -71,7 +71,7 @@
</type>
</multival-attribute>
- <multival-attribute name="groups" basedDn="ou=system"
+ <multival-attribute name="groups" baseDn="ou=system"
filter="(uniqueMember = $entryDn)" handlerRef="groupsHandler" />
<multival-attribute name="entitlements" />
@@ -111,12 +111,12 @@
<multival-attribute name="members" handlerRef="membersHandler"/>
</schema>
- <userType basedDn="ou=system" filter="(objectClass = inetOrgPerson)">
+ <userType baseDn="" filter="(objectClass = inetOrgPerson)">
<schemaRef id="user-core" />
<schemaRef id="enterprise-user" />
</userType>
- <groupType basedDn="ou=system" filter="(objectClass = inetOrgPerson)">
+ <groupType baseDn="" filter="(objectClass = inetOrgPerson)">
<schemaRef id="group" />
</groupType>
Modified: directory/escimo/trunk/server/src/main/java/org/apache/directory/scim/rest/EscimoApplication.java
URL: http://svn.apache.org/viewvc/directory/escimo/trunk/server/src/main/java/org/apache/directory/scim/rest/EscimoApplication.java?rev=1513911&r1=1513910&r2=1513911&view=diff
==============================================================================
--- directory/escimo/trunk/server/src/main/java/org/apache/directory/scim/rest/EscimoApplication.java (original)
+++ directory/escimo/trunk/server/src/main/java/org/apache/directory/scim/rest/EscimoApplication.java Wed Aug 14 14:46:24 2013
@@ -37,6 +37,7 @@ public class EscimoApplication extends A
public EscimoApplication()
{
resources.add( UserService.class );
+ resources.add( GroupService.class );
}
@Override
Added: 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=1513911&view=auto
==============================================================================
--- directory/escimo/trunk/server/src/main/java/org/apache/directory/scim/rest/GroupService.java (added)
+++ directory/escimo/trunk/server/src/main/java/org/apache/directory/scim/rest/GroupService.java Wed Aug 14 14:46:24 2013
@@ -0,0 +1,75 @@
+/*
+ * 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.
+ *
+ */
+package org.apache.directory.scim.rest;
+
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
+import javax.ws.rs.core.Response.Status;
+import javax.ws.rs.core.UriInfo;
+
+import org.apache.directory.scim.Group;
+import org.apache.directory.scim.ProviderService;
+import org.apache.directory.scim.RequestContext;
+import org.apache.directory.scim.ResourceNotFoundException;
+import org.apache.directory.scim.json.ResourceSerializer;
+
+
+/**
+ * TODO GroupService.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+@Path( "Groups" )
+public class GroupService
+{
+ private ProviderService provider = ServerInitializer.getProvider();
+
+ @GET
+ @Produces({MediaType.APPLICATION_JSON})
+ @Path("{id}")
+ public Response getUser( @PathParam("id") String userId, @Context UriInfo uriInfo )
+ {
+ ResponseBuilder rb = null;
+
+ try
+ {
+ RequestContext ctx = new RequestContext( provider );
+ ctx.setUriInfo( uriInfo );
+
+ Group group = provider.getGroup( ctx, userId );
+ String json = ResourceSerializer.serialize( group );
+ rb = Response.ok( json, MediaType.APPLICATION_JSON );
+ }
+ catch( ResourceNotFoundException e )
+ {
+ rb = Response.status( Status.INTERNAL_SERVER_ERROR );
+ }
+
+ return rb.build();
+ }
+
+}