8,8 → 8,16 |
import ak.hostadmiral.util.ModelSecurityException; |
|
public class UserManager |
implements UserBeforeDeleteListener |
{ |
private static UserManager userManager = null; |
private static boolean registered = false; |
|
public static UserManager getInstance() |
{ |
return userManager; |
} |
|
protected static void register() |
{ |
synchronized(MailboxManager.class) { |
19,6 → 27,8 |
try { |
HibernateUtil.getConfiguration().addResource( |
"/ak/hostadmiral/core/model/User.hbm.xml"); |
|
userManager = new UserManager(); |
} |
catch(Exception ex) { |
ex.printStackTrace(); |
31,8 → 41,11 |
register(); |
} |
|
private Collection beforeDeleteListeners = new ArrayList(); |
|
private UserManager() |
{ |
addBeforeDeleteListener(this); |
} |
|
public User create(User editor) |
128,6 → 141,31 |
} |
} |
|
public void addBeforeDeleteListener(UserBeforeDeleteListener listener) |
{ |
beforeDeleteListeners.add(listener); |
} |
|
public void removeBeforeDeleteListener(UserBeforeDeleteListener listener) |
{ |
beforeDeleteListeners.remove(listener); |
} |
|
public Collection beforeDelete(User editor, User user) |
throws ModelException |
{ |
Collection cascade = new ArrayList(); |
|
for(Iterator i = beforeDeleteListeners.iterator(); i.hasNext(); ) { |
UserBeforeDeleteListener listener = (UserBeforeDeleteListener)i.next(); |
Collection subcascade = listener.userBeforeDelete(editor, user); |
if(subcascade != null) |
cascade.addAll(subcascade); |
} |
|
return cascade; |
} |
|
public void delete(User editor, User user) |
throws ModelException |
{ |
201,14 → 239,38 |
return null; |
} |
|
private static UserManager userManager = null; |
|
public static UserManager getInstance() |
public Collection userBeforeDelete(User editor, User user) |
throws ModelException |
{ |
if(userManager == null) |
userManager = new UserManager(); |
Collection subusers; |
|
return userManager; |
try { |
subusers = HibernateUtil.currentSession().find( |
"from User where boss = ?", |
user, Hibernate.entity(User.class) ); |
} |
catch(HibernateException ex) |
{ |
throw new ModelException(ex); |
} |
|
Collection cascade = new ArrayList(); |
for(Iterator i = subusers.iterator(); i.hasNext(); ) { |
User u = (User)i.next(); |
if(u.viewableBy(editor)) { |
if(u.deleteableBy(editor)) |
cascade.add(new CascadeDeleteElement(u, CascadeDeleteElement.DELETE, |
this.beforeDelete(editor, u))); |
else |
cascade.add(new CascadeDeleteElement(u, CascadeDeleteElement.FORBIDDEN, null)); |
} |
else { |
cascade.add(new CascadeDeleteElement(User.createLimitedCopy(u), |
CascadeDeleteElement.FORBIDDEN, null)); |
} |
} |
|
return cascade; |
} |
|
public static final Comparator LOGIN_COMPARATOR = new LoginComparator(); |