View Javadoc

1   package com.atlassian.core.ofbiz.osuser;
2   
3   import com.atlassian.core.ofbiz.util.CoreTransactionUtil;
4   import com.opensymphony.module.propertyset.PropertySet;
5   import com.opensymphony.user.EntityNotFoundException;
6   import com.opensymphony.user.User;
7   import com.opensymphony.user.UserManager;
8   import com.opensymphony.user.provider.ofbiz.OFBizCredentialsProvider;
9   import org.apache.log4j.Category;
10  import org.ofbiz.core.entity.GenericEntityException;
11  import org.ofbiz.core.entity.GenericTransactionException;
12  import org.ofbiz.core.util.UtilMisc;
13  
14  import java.util.Collection;
15  import java.util.Iterator;
16  
17  /**
18   * This class is an extension of the OFBizCredentialsProvider, but with the
19   * transactional abilities of CoreTransactionUtil.
20   *
21   * We could also use this to add better caching in the future if we wanted.
22   */
23  public class CoreOFBizCredentialsProvider extends OFBizCredentialsProvider
24  {
25      private static final Category log = Category.getInstance(CoreOFBizCredentialsProvider.class);
26  
27      public boolean remove(String name)
28      {
29          boolean began = false;
30          try
31  		{
32  			began = CoreTransactionUtil.begin();
33  			log.debug("trying to remove properties for: " + name);
34  			User user = UserManager.getInstance().getUser(name);
35  			PropertySet props = user.getPropertySet();
36  			Iterator keyIter = props.getKeys().iterator();
37  			while (keyIter.hasNext())
38  			{
39  				props.remove((String) keyIter.next());
40  			}
41              user.getProfileProvider().flushCaches();
42  
43  			log.debug("trying to remove groups for: " + name);
44              Collection userGroups = user.getGroups();
45  
46              if (userGroups != null)
47              {
48  			    for (Iterator iterator = userGroups.iterator(); iterator.hasNext();)
49  			    {
50  			    	user.getAccessProvider().removeFromGroup(name, (String) iterator.next());
51  			    }
52              }
53              user.getAccessProvider().flushCaches();
54  
55  			log.debug("trying to remove user: " + name);
56  			clearUserCache(name);
57  			clearAllCache();
58  
59  			getDelegator().removeByAnd(userEntity, UtilMisc.toMap("name", name));
60  
61  			// modified by mike - only try to commit tx is there is one
62              CoreTransactionUtil.commit(began);
63  
64  			return true;
65  		}
66  		catch (GenericEntityException e)
67  		{
68  			log.error("Could not remove user: " + name, e);
69  			try
70  			{
71  				CoreTransactionUtil.rollback(began);
72  			}
73  			catch (GenericTransactionException e1)
74  			{
75  				log.error("Could not remove user: " + name, e1);
76  				return false;
77  			}
78  			return false;
79  		}
80  		catch (EntityNotFoundException e)
81  		{
82  			log.error("Could not remove user: " + name, e);
83  			try
84  			{
85  				CoreTransactionUtil.rollback(began);
86  			}
87  			catch (GenericTransactionException e1)
88  			{
89  				log.error("Could not remove user: " + name, e1);
90  				return false;
91  			}
92  			return false;
93  		}
94      }
95  }