1   package com.atlassian.user.impl.memory;
2   
3   import com.atlassian.user.*;
4   import com.atlassian.user.impl.DefaultGroup;
5   import com.atlassian.user.impl.DuplicateEntityException;
6   import com.atlassian.user.impl.memory.provider.MemoryProvider;
7   import com.atlassian.user.repository.RepositoryIdentifier;
8   import com.atlassian.user.search.page.Pager;
9   import com.atlassian.user.search.page.PagerUtils;
10  import com.atlassian.user.util.Assert;
11  
12  import java.util.List;
13  
14  /**
15   * @deprecated since 2.2 because it should not be used in production. Will be moved to test code in 3.0.
16   */
17  public class MemoryGroupManager implements GroupManager
18  {
19      private final MemoryProvider provider;
20      private final RepositoryIdentifier repository;
21  
22      public MemoryGroupManager(RepositoryIdentifier repository, MemoryProvider provider)
23      {
24          this.provider = provider;
25          this.repository = repository;
26      }
27  
28      public Group createGroup(String groupName) throws EntityException
29      {
30          if (getGroup(groupName) != null)
31              throw new DuplicateEntityException("The group [" + groupName + "] already exists.");
32  
33          Group group = new DefaultGroup(groupName);
34          provider.addGroup(group);
35  
36          return group;
37      }
38  
39      public void removeGroup(Group group) throws EntityException
40      {
41          provider.removeGroup(group);
42      }
43  
44      public void addMembership(Group group, User user)
45      {
46          if (group == null)
47              throw new IllegalArgumentException("Can't add membership for null group");
48          if (getGroup(group.getName()) == null)
49              throw new IllegalArgumentException("Can't add membership for unknown group: [" + group.getName() + "]");
50          provider.addMembership(group, user);
51      }
52  
53      public boolean hasMembership(Group group, User user)
54      {
55          return provider.hasMembership(group, user);
56      }
57  
58      public Pager<Group> getGroups()
59      {
60          return provider.getGroups();
61  
62      }
63  
64      public Group getGroup(String groupName)
65      {
66          return provider.getGroup(groupName);
67      }
68  
69      public Pager<Group> getGroups(User user) throws EntityException
70      {
71          Assert.notNull(user, "User must not be null");
72          return provider.getGroups(user);
73      }
74  
75      public List<Group> getWritableGroups()
76      {
77          return PagerUtils.toList(getGroups());
78      }
79  
80      public RepositoryIdentifier getConfiguration()
81      {
82          return repository;
83      }
84  
85      /**
86       * @return the {@link com.atlassian.user.repository.RepositoryIdentifier} which is managed by this instance.
87       */
88      public RepositoryIdentifier getIdentifier()
89      {
90          return repository;
91      }
92  
93      public RepositoryIdentifier getRepository(Entity entity) throws EntityException
94      {
95          if (getGroup(entity.getName()) != null)
96              return repository;
97  
98          return null;
99      }
100 
101     public String getApplicationKey()
102     {
103         return null;
104     }
105 
106     public boolean isCreative()
107     {
108         return true;
109     }
110 
111     public void removeMembership(Group group, User user)
112     {
113         if (group==null || getGroup(group.getName()) == null)
114             throw new IllegalArgumentException("Can't remove membership for unknown group: [" +
115                 (group==null ? "null" : group.getName()) + "]");
116         provider.removeMembership(group, user);
117     }
118 
119     public Pager<String> getMemberNames(Group group)
120     {
121         return provider.getMemberNames(group);
122     }
123 
124     public Pager<String> getLocalMemberNames(Group group) throws EntityException
125     {
126         return provider.getLocalMemberNames(group);
127     }
128 
129     public Pager<String> getExternalMemberNames(Group group) throws EntityException
130     {
131         return provider.getExternalMemberNames(group);
132     }
133 
134     public boolean isReadOnly(Group group) throws EntityException
135     {
136         return false;
137     }
138 
139     public boolean supportsExternalMembership() throws EntityException
140     {
141         return true;
142     }
143 }