Author: carlos
Date: Tue Aug 29 00:07:26 2006
New Revision: 437988

URL: http://svn.apache.org/viewvc?rev=437988&view=rev
Log:
Take out database code from UserManager into UserStore

Added:
    
maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/store/UserStore.java
   (with props)
    
maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/store/impl/DefaultUserStore.java
   (with props)
Modified:
    
maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/impl/DefaultUserManager.java

Modified: 
maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/impl/DefaultUserManager.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/impl/DefaultUserManager.java?rev=437988&r1=437987&r2=437988&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/impl/DefaultUserManager.java
 (original)
+++ 
maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/impl/DefaultUserManager.java
 Tue Aug 29 00:07:26 2006
@@ -17,17 +17,10 @@
  */
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 
-import javax.jdo.Extent;
-import javax.jdo.PersistenceManager;
-import javax.jdo.PersistenceManagerFactory;
-import javax.jdo.Query;
-import javax.jdo.Transaction;
-
 import org.apache.maven.user.model.Messages;
 import org.apache.maven.user.model.PasswordEncoder;
 import org.apache.maven.user.model.PasswordRule;
@@ -37,10 +30,7 @@
 import org.apache.maven.user.model.User;
 import org.apache.maven.user.model.UserGroup;
 import org.apache.maven.user.model.UserManager;
-import org.codehaus.plexus.jdo.JdoFactory;
-import org.codehaus.plexus.jdo.PlexusJdoUtils;
-import org.codehaus.plexus.jdo.PlexusObjectNotFoundException;
-import org.codehaus.plexus.jdo.PlexusStoreException;
+import org.apache.maven.user.model.store.UserStore;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
 import 
org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
 import org.codehaus.plexus.util.StringUtils;
@@ -59,40 +49,36 @@
     /**
      * @plexus.requirement
      */
-    private JdoFactory jdoFactory;
-    
+    private UserStore userStore;
+
     /**
      * @plexus.requirement role-hint="sha256"
      */
     private PasswordEncoder passwordEncoder;
-    
+
     /**
      * @plexus.configuration default-value="Step doog ekam Skravdraa"
      */
     private String salt;
-    
+
     /**
      * The List of [EMAIL PROTECTED] PasswordRule} objects.
      */
     private List rules;
-    
-    private PersistenceManagerFactory pmf;
-    
-       
+
     // ----------------------------------------------------------------------
     // Component Lifecycle
     // ----------------------------------------------------------------------
-    
+
     public void initialize()
         throws InitializationException
     {
-        pmf = jdoFactory.getPersistenceManagerFactory();
         rules = new ArrayList();
-        
+
         // TODO: Find way to have plexus initialize this list with only 1 item.
-        addPasswordRule(new MustHavePasswordRule());
+        addPasswordRule( new MustHavePasswordRule() );
     }
-    
+
     public boolean login( String username, String rawPassword )
     {
         User user = getUser( username );
@@ -103,26 +89,25 @@
 
         return this.passwordEncoder.isPasswordValid( 
user.getEncodedPassword(), rawPassword, salt );
     }
-    
-    
+
     public User addUser( User user )
         throws PasswordRuleViolationException
     {
-        if(user.getAccountId() > 0)
+        if ( user.getAccountId() > 0 )
         {
-            throw new IllegalStateException( 
Messages.getString("user.manager.cannot.add.user.with.accountId") ); 
//$NON-NLS-1$
+            throw new IllegalStateException( Messages.getString( 
"user.manager.cannot.add.user.with.accountId" ) ); //$NON-NLS-1$
         }
-        
+
         processPasswordChange( user );
-        
-        return (User) addObject( user );
+
+        return userStore.addUser( user );
     }
 
     private void processPasswordChange( User user )
         throws PasswordRuleViolationException
     {
         validatePassword( user );
-        
+
         if ( user.isGuest() )
         {
             //TODO we shouldn't allow password changes for guest users, throw 
exception before getting here
@@ -133,7 +118,7 @@
             user.setEncodedPassword( this.passwordEncoder.encodePassword( 
user.getPassword(), salt ) );
         }
         user.setPassword( null );
-        
+
         user.setLastPasswordChange( new Date() ); // update timestamp to now.
     }
 
@@ -159,12 +144,12 @@
 
     public UserGroup addUserGroup( UserGroup userGroup )
     {
-        if(userGroup.getId() > 0)
+        if ( userGroup.getId() > 0 )
         {
-            throw new IllegalStateException( 
Messages.getString("user.manager.cannot.add.group.with.id") ); //$NON-NLS-1$
+            throw new IllegalStateException( Messages.getString( 
"user.manager.cannot.add.group.with.id" ) ); //$NON-NLS-1$
         }
-        
-        return (UserGroup) addObject( userGroup );
+
+        return userStore.addUserGroup( userGroup );
     }
 
     public PasswordEncoder getPasswordEncoder()
@@ -174,20 +159,9 @@
 
     public User getUser( int accountId )
     {
-        User user = null;
-        
-        try
-        {
-            user = (User) getObjectById( User.class, accountId );
-        }
-        catch ( PlexusStoreException pse )
-        {
-            // TODO log exception
-        }
-        return user;
-
+        return userStore.getUser( accountId );
     }
-    
+
     /**
      * Get a user by name. User password won't be returned for security 
reasons.
      * 
@@ -199,188 +173,66 @@
     {
         return getUser( username );
     }
-    
+
     public User getUser( String username )
     {
-        PersistenceManager pm = getPersistenceManager();
-
-        Transaction tx = pm.currentTransaction();
-
-        try
-        {
-            tx.begin();
-
-            Extent extent = pm.getExtent( User.class, true );
-
-            Query query = pm.newQuery( extent );
-
-            query.declareImports( "import java.lang.String" ); //$NON-NLS-1$
-
-            query.declareParameters( "String username" ); //$NON-NLS-1$
-
-            query.setFilter( "this.username == username" ); //$NON-NLS-1$
-
-            Collection result = (Collection) query.execute( username );
-
-            if ( result.size() == 0 )
-            {
-                tx.commit();
-
-                return null;
-            }
-
-            Object object = pm.detachCopy( result.iterator().next() );
-
-            tx.commit();
-
-            return (User) object;
-        }
-        finally
-        {
-            rollback( tx );
-        }
-    }    
+        return userStore.getUser( username );
+    }
 
     public User getGuestUser()
     {
-        PersistenceManager pm = getPersistenceManager();
-
-        Transaction tx = pm.currentTransaction();
-
-        try
-        {
-            tx.begin();
-
-            Extent extent = pm.getExtent( User.class, true );
-
-            Query query = pm.newQuery( extent );
-
-            query.setFilter( "this.guest == true" ); //$NON-NLS-1$
-
-            Collection result = (Collection) query.execute();
-
-            if ( result.size() == 0 )
-            {
-                tx.commit();
-
-                return null;
-            }
-
-            Object object = pm.detachCopy( result.iterator().next() );
-
-            tx.commit();
-
-            return (User) object;
-        }
-        finally
-        {
-            rollback( tx );
-        }
+        return userStore.getGuestUser();
     }
 
     public UserGroup getUserGroup( int userGroupId )
     {
-        UserGroup userGroup = null;
-        
-        try
-        {
-            userGroup = (UserGroup) getObjectById( UserGroup.class, 
userGroupId );
-        }
-        catch ( PlexusStoreException pse )
-        {
-            //TODO log exception
-        }
-        return userGroup;
+        return userStore.getUserGroup( userGroupId );
     }
 
     public UserGroup getUserGroup( String name )
     {
-        PersistenceManager pm = getPersistenceManager();
-
-        Transaction tx = pm.currentTransaction();
-
-        try
-        {
-            tx.begin();
-
-            Extent extent = pm.getExtent( UserGroup.class, true );
-
-            Query query = pm.newQuery( extent );
-
-            query.declareImports( "import java.lang.String" ); //$NON-NLS-1$
-
-            query.declareParameters( "String name" ); //$NON-NLS-1$
-
-            query.setFilter( "this.name == name" ); //$NON-NLS-1$
-
-            Collection result = (Collection) query.execute( name );
-
-            if ( result.size() == 0 )
-            {
-                tx.commit();
-
-                return null;
-            }
-
-            Object object = pm.detachCopy( result.iterator().next() );
-
-            tx.commit();
-
-            return (UserGroup) object;
-        }
-        finally
-        {
-            rollback( tx );
-        }
+        return userStore.getUserGroup( name );
     }
 
     public List getUserGroups()
     {
-        return getAllObjectsDetached( UserGroup.class );
+        return userStore.getUserGroups();
     }
 
     public List getUsers()
     {
-        return getAllObjectsDetached( User.class );
+        return userStore.getUsers();
     }
 
     public void removeUser( int userId )
     {
-        User user = getUser( userId );
-        
-        removeObject( user );
+        userStore.removeUser( userId );
     }
 
     public void removeUser( String username )
     {
-        User user = getUser( username );
-        
-        removeObject( user );
+        userStore.removeUser( username );
     }
-    
+
     public void removeUserGroup( int userGroupId )
     {
-        UserGroup userGroup = getUserGroup( userGroupId );
-        
-        removeObject( userGroup );
+        userStore.removeUserGroup( userGroupId );
     }
-    
+
     public void removeUserGroup( String userGroupName )
     {
-        UserGroup userGroup = getUserGroup( userGroupName );
-
-        removeObject( userGroup );
+        userStore.removeUserGroup( userGroupName );
     }
 
     public void setPasswordEncoder( PasswordEncoder passwordEncoder )
     {
         this.passwordEncoder = passwordEncoder;
     }
-    
+
     public void addPasswordRule( PasswordRule rule )
     {
         // TODO: check for duplicates?
-        
+
         this.rules.add( rule );
     }
 
@@ -397,157 +249,37 @@
     public void updateUser( User user )
         throws PasswordRuleViolationException
     {
-        try
+        // If password is supplied, assume changing of password.
+        if ( !StringUtils.isEmpty( user.getPassword() ) )
         {
-            // If password is supplied, assume changing of password.
-            if ( !StringUtils.isEmpty( user.getPassword() ) )
-            {
-                processPasswordChange( user );
-            }
-
-            updateObject( user );
-        }
-        catch ( PlexusStoreException pse )
-        {
-            //log exception
+            processPasswordChange( user );
         }
+
+        userStore.updateUser( user );
     }
 
     public void updateUserGroup( UserGroup userGroup )
     {
-        try
-        {
-            updateObject( userGroup );
-        }
-        catch ( PlexusStoreException pse )
-        {
-            //log exception
-        }
+        userStore.updateUserGroup( userGroup );
     }
 
     public List getPermissions()
     {
-        return getAllObjectsDetached( Permission.class );
+        return userStore.getPermissions();
     }
 
     public Permission getPermission( String name )
     {
-        PersistenceManager pm = getPersistenceManager();
-
-        Transaction tx = pm.currentTransaction();
-
-        try
-        {
-            tx.begin();
-
-            Extent extent = pm.getExtent( Permission.class, true );
-
-            Query query = pm.newQuery( extent );
-
-            query.declareImports( "import java.lang.String" ); //$NON-NLS-1$
-
-            query.declareParameters( "String name" ); //$NON-NLS-1$
-
-            query.setFilter( "this.name == name" ); //$NON-NLS-1$
-
-            Collection result = (Collection) query.execute( name );
-
-            if ( result.size() == 0 )
-            {
-                tx.commit();
-
-                return null;
-            }
-
-            Object object = pm.detachCopy( result.iterator().next() );
-
-            tx.commit();
-
-            return (Permission) object;
-        }
-        finally
-        {
-            rollback( tx );
-        }
+        return userStore.getPermission( name );
     }
 
     public Permission addPermission( Permission perm )
     {
-        if(perm.getId() > 0)
+        if ( perm.getId() > 0 )
         {
-            throw new IllegalStateException( 
Messages.getString("user.manager.cannot.add.permission.with.id") ); 
//$NON-NLS-1$
+            throw new IllegalStateException( Messages.getString( 
"user.manager.cannot.add.permission.with.id" ) ); //$NON-NLS-1$
         }
-        
-        return (Permission) addObject( perm );
-    }
-    
-    private Object addObject( Object object )
-    {
-        return PlexusJdoUtils.addObject( getPersistenceManager(), object );
-    }
-    
-    private Object getObjectById( Class clazz, int id )
-        throws PlexusStoreException
-    {
-        return getObjectById( clazz, id, null );
-    }
-    
-    private Object getObjectById( Class clazz, int id, String fetchGroup )
-        throws PlexusStoreException
-    {
-        try
-        {
-            return PlexusJdoUtils.getObjectById( getPersistenceManager(), 
clazz, id, fetchGroup );
-        }
-        catch ( PlexusObjectNotFoundException e )
-        {
-            // TODO make PlexusObjectNotFoundException runtime or change 
plexus not to wrap jdo exceptions
-            throw new RuntimeException( e.getMessage() );
-        }
-        catch ( PlexusStoreException e )
-        {
-            throw new PlexusStoreException( e.getMessage(), e );
-        }
-    }
-    
-    private List getAllObjectsDetached( Class clazz )
-    {
-        return getAllObjectsDetached( clazz, null );
-    }
 
-    private List getAllObjectsDetached( Class clazz, String fetchGroup )
-    {
-        return getAllObjectsDetached( clazz, null, fetchGroup );
+        return (Permission) userStore.addPermission( perm );
     }
-
-    private List getAllObjectsDetached( Class clazz, String ordering, String 
fetchGroup )
-    {
-        return PlexusJdoUtils.getAllObjectsDetached( getPersistenceManager(), 
clazz, ordering, fetchGroup );
-    }
-    
-    private void removeObject( Object o )
-    {
-        PlexusJdoUtils.removeObject( getPersistenceManager(), o );
-    }
-    
-    private void updateObject( Object object )
-        throws PlexusStoreException
-    {
-        PlexusJdoUtils.updateObject( getPersistenceManager(), object );
-    }
-    
-    private PersistenceManager getPersistenceManager()
-    {
-        PersistenceManager pm = pmf.getPersistenceManager();
-
-        pm.getFetchPlan().setMaxFetchDepth( -1 );
-
-        return pm;
-    } 
-
-    private void rollback( Transaction tx )
-    {
-        PlexusJdoUtils.rollbackIfActive( tx );
-    }
-
 }

Added: 
maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/store/UserStore.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/store/UserStore.java?rev=437988&view=auto
==============================================================================
--- 
maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/store/UserStore.java
 (added)
+++ 
maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/store/UserStore.java
 Tue Aug 29 00:07:26 2006
@@ -0,0 +1,70 @@
+package org.apache.maven.user.model.store;
+
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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 java.util.List;
+
+import org.apache.maven.user.model.Permission;
+import org.apache.maven.user.model.User;
+import org.apache.maven.user.model.UserGroup;
+
+/**
+ * DAO to manage persistence of user related objects.
+ * 
+ * @author <a href="mailto:[EMAIL PROTECTED]">Carlos Sanchez</a>
+ * @version $Id$
+ */
+public interface UserStore
+{
+
+    User addUser( User user );
+
+    UserGroup addUserGroup( UserGroup userGroup );
+
+    User getUser( int accountId );
+
+    User getUser( String username );
+
+    User getGuestUser();
+
+    UserGroup getUserGroup( int userGroupId );
+
+    UserGroup getUserGroup( String name );
+
+    List getUserGroups();
+
+    List getUsers();
+
+    void removeUser( int userId );
+
+    void removeUser( String username );
+
+    void removeUserGroup( int userGroupId );
+
+    void removeUserGroup( String userGroupName );
+
+    void updateUser( User user );
+
+    void updateUserGroup( UserGroup userGroup );
+
+    List getPermissions();
+
+    Permission getPermission( String name );
+
+    Permission addPermission( Permission perm );
+
+}
\ No newline at end of file

Propchange: 
maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/store/UserStore.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/store/UserStore.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: 
maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/store/impl/DefaultUserStore.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/store/impl/DefaultUserStore.java?rev=437988&view=auto
==============================================================================
--- 
maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/store/impl/DefaultUserStore.java
 (added)
+++ 
maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/store/impl/DefaultUserStore.java
 Tue Aug 29 00:07:26 2006
@@ -0,0 +1,420 @@
+package org.apache.maven.user.model.store.impl;
+
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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 java.util.Collection;
+import java.util.List;
+
+import javax.jdo.Extent;
+import javax.jdo.PersistenceManager;
+import javax.jdo.PersistenceManagerFactory;
+import javax.jdo.Query;
+import javax.jdo.Transaction;
+
+import org.apache.maven.user.model.Permission;
+import org.apache.maven.user.model.User;
+import org.apache.maven.user.model.UserGroup;
+import org.apache.maven.user.model.store.UserStore;
+import org.codehaus.plexus.jdo.JdoFactory;
+import org.codehaus.plexus.jdo.PlexusJdoUtils;
+import org.codehaus.plexus.jdo.PlexusObjectNotFoundException;
+import org.codehaus.plexus.jdo.PlexusStoreException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
+import 
org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
+
+/**
+ * User DAO implementation using JDO.
+ * 
+ * @plexus.component role="org.apache.maven.user.model.store.UserStore"
+ * 
+ * @author <a href="mailto:[EMAIL PROTECTED]">Carlos Sanchez</a>
+ * @version $Id$
+ */
+public class DefaultUserStore
+    implements UserStore, Initializable
+{
+    /**
+     * @plexus.requirement
+     */
+    private JdoFactory jdoFactory;
+
+    private PersistenceManagerFactory pmf;
+
+    // ----------------------------------------------------------------------
+    // Component Lifecycle
+    // ----------------------------------------------------------------------
+
+    public void initialize()
+        throws InitializationException
+    {
+        pmf = jdoFactory.getPersistenceManagerFactory();
+    }
+
+    public User addUser( User user )
+    {
+        return (User) addObject( user );
+    }
+
+    public UserGroup addUserGroup( UserGroup userGroup )
+    {
+        return (UserGroup) addObject( userGroup );
+    }
+
+    public User getUser( int accountId )
+    {
+        User user = null;
+
+        try
+        {
+            user = (User) getObjectById( User.class, accountId );
+        }
+        catch ( PlexusStoreException pse )
+        {
+            // TODO log exception
+        }
+        return user;
+
+    }
+
+    /**
+     * Get a user by name. User password won't be returned for security 
reasons.
+     * 
+     * @param username
+     * @return null if the user doesn't exist
+     * @deprecated use [EMAIL PROTECTED] #getUser(String)} instead.
+     */
+    public User getUserByUsername( String username )
+    {
+        return getUser( username );
+    }
+
+    public User getUser( String username )
+    {
+        PersistenceManager pm = getPersistenceManager();
+
+        Transaction tx = pm.currentTransaction();
+
+        try
+        {
+            tx.begin();
+
+            Extent extent = pm.getExtent( User.class, true );
+
+            Query query = pm.newQuery( extent );
+
+            query.declareImports( "import java.lang.String" ); //$NON-NLS-1$
+
+            query.declareParameters( "String username" ); //$NON-NLS-1$
+
+            query.setFilter( "this.username == username" ); //$NON-NLS-1$
+
+            Collection result = (Collection) query.execute( username );
+
+            if ( result.size() == 0 )
+            {
+                tx.commit();
+
+                return null;
+            }
+
+            Object object = pm.detachCopy( result.iterator().next() );
+
+            tx.commit();
+
+            return (User) object;
+        }
+        finally
+        {
+            rollback( tx );
+        }
+    }
+
+    public User getGuestUser()
+    {
+        PersistenceManager pm = getPersistenceManager();
+
+        Transaction tx = pm.currentTransaction();
+
+        try
+        {
+            tx.begin();
+
+            Extent extent = pm.getExtent( User.class, true );
+
+            Query query = pm.newQuery( extent );
+
+            query.setFilter( "this.guest == true" ); //$NON-NLS-1$
+
+            Collection result = (Collection) query.execute();
+
+            if ( result.size() == 0 )
+            {
+                tx.commit();
+
+                return null;
+            }
+
+            Object object = pm.detachCopy( result.iterator().next() );
+
+            tx.commit();
+
+            return (User) object;
+        }
+        finally
+        {
+            rollback( tx );
+        }
+    }
+
+    public UserGroup getUserGroup( int userGroupId )
+    {
+        UserGroup userGroup = null;
+
+        try
+        {
+            userGroup = (UserGroup) getObjectById( UserGroup.class, 
userGroupId );
+        }
+        catch ( PlexusStoreException pse )
+        {
+            //TODO log exception
+        }
+        return userGroup;
+    }
+
+    public UserGroup getUserGroup( String name )
+    {
+        PersistenceManager pm = getPersistenceManager();
+
+        Transaction tx = pm.currentTransaction();
+
+        try
+        {
+            tx.begin();
+
+            Extent extent = pm.getExtent( UserGroup.class, true );
+
+            Query query = pm.newQuery( extent );
+
+            query.declareImports( "import java.lang.String" ); //$NON-NLS-1$
+
+            query.declareParameters( "String name" ); //$NON-NLS-1$
+
+            query.setFilter( "this.name == name" ); //$NON-NLS-1$
+
+            Collection result = (Collection) query.execute( name );
+
+            if ( result.size() == 0 )
+            {
+                tx.commit();
+
+                return null;
+            }
+
+            Object object = pm.detachCopy( result.iterator().next() );
+
+            tx.commit();
+
+            return (UserGroup) object;
+        }
+        finally
+        {
+            rollback( tx );
+        }
+    }
+
+    public List getUserGroups()
+    {
+        return getAllObjectsDetached( UserGroup.class );
+    }
+
+    public List getUsers()
+    {
+        return getAllObjectsDetached( User.class );
+    }
+
+    public void removeUser( int userId )
+    {
+        User user = getUser( userId );
+
+        removeObject( user );
+    }
+
+    public void removeUser( String username )
+    {
+        User user = getUser( username );
+
+        removeObject( user );
+    }
+
+    public void removeUserGroup( int userGroupId )
+    {
+        UserGroup userGroup = getUserGroup( userGroupId );
+
+        removeObject( userGroup );
+    }
+
+    public void removeUserGroup( String userGroupName )
+    {
+        UserGroup userGroup = getUserGroup( userGroupName );
+
+        removeObject( userGroup );
+    }
+
+    public void updateUser( User user )
+    {
+        try
+        {
+            updateObject( user );
+        }
+        catch ( PlexusStoreException pse )
+        {
+            //TODO log exception
+        }
+    }
+
+    public void updateUserGroup( UserGroup userGroup )
+    {
+        try
+        {
+            updateObject( userGroup );
+        }
+        catch ( PlexusStoreException pse )
+        {
+            //TODO log exception
+        }
+    }
+
+    public List getPermissions()
+    {
+        return getAllObjectsDetached( Permission.class );
+    }
+
+    public Permission getPermission( String name )
+    {
+        PersistenceManager pm = getPersistenceManager();
+
+        Transaction tx = pm.currentTransaction();
+
+        try
+        {
+            tx.begin();
+
+            Extent extent = pm.getExtent( Permission.class, true );
+
+            Query query = pm.newQuery( extent );
+
+            query.declareImports( "import java.lang.String" ); //$NON-NLS-1$
+
+            query.declareParameters( "String name" ); //$NON-NLS-1$
+
+            query.setFilter( "this.name == name" ); //$NON-NLS-1$
+
+            Collection result = (Collection) query.execute( name );
+
+            if ( result.size() == 0 )
+            {
+                tx.commit();
+
+                return null;
+            }
+
+            Object object = pm.detachCopy( result.iterator().next() );
+
+            tx.commit();
+
+            return (Permission) object;
+        }
+        finally
+        {
+            rollback( tx );
+        }
+    }
+
+    public Permission addPermission( Permission perm )
+    {
+        return (Permission) addObject( perm );
+    }
+
+    private Object addObject( Object object )
+    {
+        return PlexusJdoUtils.addObject( getPersistenceManager(), object );
+    }
+
+    private Object getObjectById( Class clazz, int id )
+        throws PlexusStoreException
+    {
+        return getObjectById( clazz, id, null );
+    }
+
+    private Object getObjectById( Class clazz, int id, String fetchGroup )
+        throws PlexusStoreException
+    {
+        try
+        {
+            return PlexusJdoUtils.getObjectById( getPersistenceManager(), 
clazz, id, fetchGroup );
+        }
+        catch ( PlexusObjectNotFoundException e )
+        {
+            // TODO make PlexusObjectNotFoundException runtime or change 
plexus not to wrap jdo exceptions
+            throw new RuntimeException( e.getMessage() );
+        }
+        catch ( PlexusStoreException e )
+        {
+            throw new PlexusStoreException( e.getMessage(), e );
+        }
+    }
+
+    private List getAllObjectsDetached( Class clazz )
+    {
+        return getAllObjectsDetached( clazz, null );
+    }
+
+    private List getAllObjectsDetached( Class clazz, String fetchGroup )
+    {
+        return getAllObjectsDetached( clazz, null, fetchGroup );
+    }
+
+    private List getAllObjectsDetached( Class clazz, String ordering, String 
fetchGroup )
+    {
+        return PlexusJdoUtils.getAllObjectsDetached( getPersistenceManager(), 
clazz, ordering, fetchGroup );
+    }
+
+    private void removeObject( Object o )
+    {
+        PlexusJdoUtils.removeObject( getPersistenceManager(), o );
+    }
+
+    private void updateObject( Object object )
+        throws PlexusStoreException
+    {
+        PlexusJdoUtils.updateObject( getPersistenceManager(), object );
+    }
+
+    private PersistenceManager getPersistenceManager()
+    {
+        PersistenceManager pm = pmf.getPersistenceManager();
+
+        pm.getFetchPlan().setMaxFetchDepth( -1 );
+
+        return pm;
+    }
+
+    private void rollback( Transaction tx )
+    {
+        PlexusJdoUtils.rollbackIfActive( tx );
+    }
+}

Propchange: 
maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/store/impl/DefaultUserStore.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/store/impl/DefaultUserStore.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"


Reply via email to