Author: olamy
Date: Wed Jan 30 17:46:05 2013
New Revision: 1440551

URL: http://svn.apache.org/viewvc?rev=1440551&view=rev
Log:
cleanup interface and add default implementation

Added:
    
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/StringList.java
      - copied, changed from r1440549, 
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/LdapGroupMapping.java
    
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/DefaultLdapGroupMappingService.java
   (with props)
Modified:
    
archiva/redback/redback-core/trunk/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/role/DefaultLdapRoleMapperConfiguration.java
    
archiva/redback/redback-core/trunk/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/role/LdapRoleMapperConfiguration.java
    
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/LdapGroupMapping.java
    
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/services/LdapGroupMappingService.java

Modified: 
archiva/redback/redback-core/trunk/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/role/DefaultLdapRoleMapperConfiguration.java
URL: 
http://svn.apache.org/viewvc/archiva/redback/redback-core/trunk/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/role/DefaultLdapRoleMapperConfiguration.java?rev=1440551&r1=1440550&r2=1440551&view=diff
==============================================================================
--- 
archiva/redback/redback-core/trunk/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/role/DefaultLdapRoleMapperConfiguration.java
 (original)
+++ 
archiva/redback/redback-core/trunk/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/role/DefaultLdapRoleMapperConfiguration.java
 Wed Jan 30 17:46:05 2013
@@ -38,7 +38,7 @@ import java.util.Map;
  * @author Olivier Lamy
  * @since 2.1
  */
-@Service("ldapRoleMapperConfiguration#default")
+@Service( "ldapRoleMapperConfiguration#default" )
 public class DefaultLdapRoleMapperConfiguration
     implements LdapRoleMapperConfiguration
 {
@@ -46,10 +46,9 @@ public class DefaultLdapRoleMapperConfig
     private Logger log = LoggerFactory.getLogger( getClass() );
 
     @Inject
-    @Named(value = "userConfiguration#default")
+    @Named( value = "userConfiguration#default" )
     private UserConfiguration userConf;
 
-
     public void addLdapMapping( String ldapGroup, List<String> roles )
         throws MappingException
     {
@@ -61,6 +60,12 @@ public class DefaultLdapRoleMapperConfig
         log.warn( "removeLdapMapping not implemented" );
     }
 
+    public void updateLdapMapping( String ldapGroup, List<String> roles )
+        throws MappingException
+    {
+        log.warn( "removeLdapMapping not implemented" );
+    }
+
     public void setLdapGroupMappings( Map<String, Collection<String>> mappings 
)
         throws MappingException
     {

Modified: 
archiva/redback/redback-core/trunk/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/role/LdapRoleMapperConfiguration.java
URL: 
http://svn.apache.org/viewvc/archiva/redback/redback-core/trunk/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/role/LdapRoleMapperConfiguration.java?rev=1440551&r1=1440550&r2=1440551&view=diff
==============================================================================
--- 
archiva/redback/redback-core/trunk/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/role/LdapRoleMapperConfiguration.java
 (original)
+++ 
archiva/redback/redback-core/trunk/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/role/LdapRoleMapperConfiguration.java
 Wed Jan 30 17:46:05 2013
@@ -40,6 +40,15 @@ public interface LdapRoleMapperConfigura
         throws MappingException;
 
     /**
+     * update an existing mapping
+     * @param ldapGroup
+     * @param roles
+     * @throws MappingException
+     */
+    void updateLdapMapping( String ldapGroup, List<String> roles )
+        throws MappingException;
+
+    /**
      * remove a mapping
      *
      * @param group ldap group

Modified: 
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/LdapGroupMapping.java
URL: 
http://svn.apache.org/viewvc/archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/LdapGroupMapping.java?rev=1440551&r1=1440550&r2=1440551&view=diff
==============================================================================
--- 
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/LdapGroupMapping.java
 (original)
+++ 
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/LdapGroupMapping.java
 Wed Jan 30 17:46:05 2013
@@ -19,25 +19,28 @@ package org.apache.archiva.redback.rest.
  */
 
 import javax.xml.bind.annotation.XmlRootElement;
+import java.io.Serializable;
+import java.util.Collection;
 import java.util.List;
 
 /**
  * @author Olivier Lamy
  * @since 2.1
  */
-@XmlRootElement( name = "ldapGroupMapping" )
+@XmlRootElement(name = "ldapGroupMapping")
 public class LdapGroupMapping
+    implements Serializable
 {
     private String group;
 
-    private List<String> roleNames;
+    private Collection<String> roleNames;
 
     public LdapGroupMapping()
     {
         // no op
     }
 
-    public LdapGroupMapping( String group, List<String> roleNames )
+    public LdapGroupMapping( String group, Collection<String> roleNames )
     {
         this.group = group;
         this.roleNames = roleNames;
@@ -53,12 +56,12 @@ public class LdapGroupMapping
         this.group = group;
     }
 
-    public List<String> getRoleNames()
+    public Collection<String> getRoleNames()
     {
         return roleNames;
     }
 
-    public void setRoleNames( List<String> roleNames )
+    public void setRoleNames( Collection<String> roleNames )
     {
         this.roleNames = roleNames;
     }

Copied: 
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/StringList.java
 (from r1440549, 
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/LdapGroupMapping.java)
URL: 
http://svn.apache.org/viewvc/archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/StringList.java?p2=archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/StringList.java&p1=archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/LdapGroupMapping.java&r1=1440549&r2=1440551&rev=1440551&view=diff
==============================================================================
--- 
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/LdapGroupMapping.java
 (original)
+++ 
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/StringList.java
 Wed Jan 30 17:46:05 2013
@@ -19,58 +19,37 @@ package org.apache.archiva.redback.rest.
  */
 
 import javax.xml.bind.annotation.XmlRootElement;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
+ * jaxrs fail to return List<String> so use this contains for rest services 
returning that
+ *
  * @author Olivier Lamy
  * @since 2.1
  */
-@XmlRootElement( name = "ldapGroupMapping" )
-public class LdapGroupMapping
+@XmlRootElement( name = "stringList" )
+public class StringList
 {
-    private String group;
+    private List<String> strings;
 
-    private List<String> roleNames;
-
-    public LdapGroupMapping()
+    public StringList()
     {
         // no op
     }
 
-    public LdapGroupMapping( String group, List<String> roleNames )
-    {
-        this.group = group;
-        this.roleNames = roleNames;
-    }
-
-    public String getGroup()
-    {
-        return group;
-    }
-
-    public void setGroup( String group )
-    {
-        this.group = group;
-    }
-
-    public List<String> getRoleNames()
+    public StringList( List<String> strings )
     {
-        return roleNames;
+        this.strings = strings;
     }
 
-    public void setRoleNames( List<String> roleNames )
+    public List<String> getStrings()
     {
-        this.roleNames = roleNames;
+        return strings == null ? new ArrayList<String>( 0 ) : strings;
     }
 
-    @Override
-    public String toString()
+    public void setStrings( List<String> strings )
     {
-        final StringBuilder sb = new StringBuilder();
-        sb.append( "LdapGroupMapping" );
-        sb.append( "{group='" ).append( group ).append( '\'' );
-        sb.append( ", roleNames=" ).append( roleNames );
-        sb.append( '}' );
-        return sb.toString();
+        this.strings = strings;
     }
 }

Modified: 
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/services/LdapGroupMappingService.java
URL: 
http://svn.apache.org/viewvc/archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/services/LdapGroupMappingService.java?rev=1440551&r1=1440550&r2=1440551&view=diff
==============================================================================
--- 
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/services/LdapGroupMappingService.java
 (original)
+++ 
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/services/LdapGroupMappingService.java
 Wed Jan 30 17:46:05 2013
@@ -21,6 +21,7 @@ package org.apache.archiva.redback.rest.
 import org.apache.archiva.redback.authorization.RedbackAuthorization;
 import 
org.apache.archiva.redback.integration.security.role.RedbackRoleConstants;
 import org.apache.archiva.redback.rest.api.model.LdapGroupMapping;
+import org.apache.archiva.redback.rest.api.model.StringList;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
@@ -44,7 +45,7 @@ public interface LdapGroupMappingService
     @GET
     @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
     @RedbackAuthorization( permissions = 
RedbackRoleConstants.USER_ADMINISTRATOR_ROLE )
-    String getLdapGroups()
+    StringList getLdapGroups()
         throws RedbackServiceException;
 
 

Added: 
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/DefaultLdapGroupMappingService.java
URL: 
http://svn.apache.org/viewvc/archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/DefaultLdapGroupMappingService.java?rev=1440551&view=auto
==============================================================================
--- 
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/DefaultLdapGroupMappingService.java
 (added)
+++ 
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/DefaultLdapGroupMappingService.java
 Wed Jan 30 17:46:05 2013
@@ -0,0 +1,186 @@
+package org.apache.archiva.redback.rest.services;
+/*
+ * 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.
+ */
+
+import org.apache.archiva.redback.common.ldap.MappingException;
+import org.apache.archiva.redback.common.ldap.connection.LdapConnection;
+import org.apache.archiva.redback.common.ldap.connection.LdapConnectionFactory;
+import org.apache.archiva.redback.common.ldap.connection.LdapException;
+import org.apache.archiva.redback.common.ldap.role.LdapRoleMapper;
+import org.apache.archiva.redback.common.ldap.role.LdapRoleMapperConfiguration;
+import org.apache.archiva.redback.rest.api.model.LdapGroupMapping;
+import org.apache.archiva.redback.rest.api.model.StringList;
+import org.apache.archiva.redback.rest.api.services.LdapGroupMappingService;
+import org.apache.archiva.redback.rest.api.services.RedbackServiceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.naming.NamingException;
+import javax.naming.directory.DirContext;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Olivier Lamy
+ * @since 2.1
+ */
+public class DefaultLdapGroupMappingService
+    implements LdapGroupMappingService
+{
+    private Logger log = LoggerFactory.getLogger( getClass() );
+
+    @Inject
+    private LdapRoleMapper ldapRoleMapper;
+
+    @Inject
+    @Named( value = "ldapRoleMapperConfiguration#default" )
+    private LdapRoleMapperConfiguration ldapRoleMapperConfiguration;
+
+    @Inject
+    private LdapConnectionFactory ldapConnectionFactory;
+
+    public StringList getLdapGroups()
+        throws RedbackServiceException
+    {
+        LdapConnection ldapConnection = null;
+
+        DirContext context = null;
+
+        try
+        {
+            ldapConnection = ldapConnectionFactory.getConnection();
+            return new StringList( ldapRoleMapper.getAllGroups( context ) );
+        }
+        catch ( LdapException e )
+        {
+            log.error( e.getMessage(), e );
+            throw new RedbackServiceException( e.getMessage() );
+        }
+        catch ( MappingException e )
+        {
+            log.error( e.getMessage(), e );
+            throw new RedbackServiceException( e.getMessage() );
+        }
+        finally
+        {
+            closeContext( context );
+            closeLdapConnection( ldapConnection );
+        }
+    }
+
+    public List<LdapGroupMapping> getLdapGroupMappings()
+        throws RedbackServiceException
+    {
+        try
+        {
+            Map<String, Collection<String>> map = 
ldapRoleMapperConfiguration.getLdapGroupMappings();
+            List<LdapGroupMapping> ldapGroupMappings = new 
ArrayList<LdapGroupMapping>( map.size() );
+            for ( Map.Entry<String, Collection<String>> entry : map.entrySet() 
)
+            {
+                LdapGroupMapping ldapGroupMapping = new LdapGroupMapping( 
entry.getKey(), entry.getValue() );
+                ldapGroupMappings.add( ldapGroupMapping );
+            }
+
+            return ldapGroupMappings;
+        }
+        catch ( MappingException e )
+        {
+            log.error( e.getMessage(), e );
+            throw new RedbackServiceException( e.getMessage() );
+        }
+    }
+
+    public Boolean addLdapGroupMapping( LdapGroupMapping ldapGroupMapping )
+        throws RedbackServiceException
+    {
+        try
+        {
+            ldapRoleMapperConfiguration.addLdapMapping( 
ldapGroupMapping.getGroup(),
+                                                        new ArrayList( 
ldapGroupMapping.getRoleNames() ) );
+        }
+        catch ( MappingException e )
+        {
+            log.error( e.getMessage(), e );
+            throw new RedbackServiceException( e.getMessage() );
+        }
+        return Boolean.TRUE;
+    }
+
+    public Boolean removeLdapGroupMapping( String group )
+        throws RedbackServiceException
+    {
+        try
+        {
+            ldapRoleMapperConfiguration.removeLdapMapping( group );
+        }
+        catch ( MappingException e )
+        {
+            log.error( e.getMessage(), e );
+            throw new RedbackServiceException( e.getMessage() );
+        }
+        return Boolean.TRUE;
+    }
+
+    public Boolean updateLdapGroupMapping( LdapGroupMapping ldapGroupMapping )
+        throws RedbackServiceException
+    {
+        try
+        {
+            ldapRoleMapperConfiguration.updateLdapMapping( 
ldapGroupMapping.getGroup(),
+                                                           new ArrayList( 
ldapGroupMapping.getRoleNames() ) );
+        }
+        catch ( MappingException e )
+        {
+            log.error( e.getMessage(), e );
+            throw new RedbackServiceException( e.getMessage() );
+        }
+        return Boolean.TRUE;
+    }
+
+    //------------------
+    // utils
+    //------------------
+
+    protected void closeLdapConnection( LdapConnection ldapConnection )
+    {
+        if ( ldapConnection != null )
+        {
+            ldapConnection.close();
+        }
+    }
+
+    protected void closeContext( DirContext context )
+    {
+        if ( context != null )
+        {
+            try
+            {
+                context.close();
+            }
+            catch ( NamingException e )
+            {
+                log.warn( "skip issue closing context: {}", e.getMessage() );
+            }
+        }
+    }
+}

Propchange: 
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/DefaultLdapGroupMappingService.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
archiva/redback/redback-core/trunk/redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/DefaultLdapGroupMappingService.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision


Reply via email to