Subversion Repositories general

Compare Revisions

Ignore whitespace Rev 945 → Rev 946

/sun/hostadmiral/trunk/webapp/WEB-INF/struts-config.xml
199,6 → 199,17
</action>
 
<action
path="/user/deleting"
type="ak.hostadmiral.core.action.UserAction"
parameter="deleting"
name="ak.hostadmiral.core.form.UserForm"
validate="true"
scope="request"
>
<forward name="default" path="/deleting.jsp" />
</action>
 
<action
path="/user/delete"
type="ak.hostadmiral.core.action.UserAction"
parameter="delete"
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/action/UserAction.java
99,6 → 99,17
else
return mapping.findForward("view");
}
else if("deleting".equals(mapping.getParameter())) {
DynaActionForm theForm = (DynaActionForm)form;
Long userId = StringConverter.parseLong(theForm.get("id"));
User u = UserManager.getInstance().get(user, userId);
 
request.setAttribute("action", "/user/delete.do");
request.setAttribute("object", u);
request.setAttribute("cascade", UserManager.getInstance().beforeDelete(user, u));
 
return mapping.findForward("default");
}
else if("delete".equals(mapping.getParameter())) {
DynaActionForm theForm = (DynaActionForm)form;
Long userId = StringConverter.parseLong(theForm.get("id"));
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/UserManager.java
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();
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/User.java
176,7 → 176,7
 
public boolean deleteableBy(User user)
{
return user.isSuperuser() || user.equals(boss);
return !user.equals(this) && (user.isSuperuser() || user.equals(boss));
}
 
public boolean mayChangePassword(User user)
194,4 → 194,11
{
return editor.isSuperuser();
}
 
protected static User createLimitedCopy(User origin)
{
User u = new User();
u.setLogin(origin.getLogin());
return u;
}
}
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/CascadeDeleteElement.java
0,0 → 1,55
package ak.hostadmiral.core.model;
 
import java.util.Collection;
 
public class CascadeDeleteElement
{
public static final int FORBIDDEN = 1;
public static final int DELETE = 2;
public static final int CHANGE = 3;
 
private ModelObject object;
private int effect;
private Collection cascade; // Collection(CascadeDeleteElement)
 
public CascadeDeleteElement()
{
}
 
public CascadeDeleteElement(ModelObject object, int effect, Collection cascade)
{
this.object = object;
this.effect = effect;
this.cascade = cascade;
}
 
public ModelObject getObject()
{
return object;
}
 
public void setObject(ModelObject object)
{
this.object = object;
}
 
public int getEffect()
{
return effect;
}
 
public void setEffect(int effect)
{
this.effect = effect;
}
 
public Collection getCascade()
{
return cascade;
}
 
public void setCascade(Collection cascade)
{
this.cascade = cascade;
}
}
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/InetDomainManager.java
8,8 → 8,19
import ak.hostadmiral.util.ModelSecurityException;
 
public class InetDomainManager
implements UserBeforeDeleteListener
{
private static InetDomainManager inetDomainManager = null;
private static boolean registered = false;
 
public static InetDomainManager getInstance()
{
if(inetDomainManager == null)
inetDomainManager = new InetDomainManager();
 
return inetDomainManager;
}
 
protected static void register()
{
synchronized(InetDomainManager.class) {
19,6 → 30,8
try {
HibernateUtil.getConfiguration().addResource(
"/ak/hostadmiral/core/model/InetDomain.hbm.xml");
 
inetDomainManager = new InetDomainManager();
}
catch(Exception ex) {
ex.printStackTrace();
33,6 → 46,7
 
private InetDomainManager()
{
UserManager.getInstance().addBeforeDeleteListener(this);
}
 
public InetDomain create(User editor)
109,16 → 123,16
}
}
 
public void save(User editor, InetDomain inetDomain)
public void save(User editor, InetDomain domain)
throws ModelException
{
if(!inetDomain.editableBy(editor))
if(!domain.editableBy(editor))
throw new ModelSecurityException();
 
inetDomain.setModUser(editor);
domain.setModUser(editor);
 
try {
HibernateUtil.currentSession().saveOrUpdate(inetDomain);
HibernateUtil.currentSession().saveOrUpdate(domain);
}
catch(HibernateException ex)
{
126,15 → 140,30
}
}
 
public void delete(User editor, InetDomain inetDomain)
public Collection beforeDelete(User editor, InetDomain domain)
throws ModelException
{
Collection cascade = new ArrayList();
/*
for(Iterator i = beforeDeleteListeners.iterator(); i.hasNext(); ) {
InetDomainBeforeDeleteListener listener = (InetDomainBeforeDeleteListener)i.next();
Collection subcascade = listener.userBeforeDelete(editor, domain);
if(subcascade != null)
cascade.addAll(subcascade);
}
*/
return cascade;
}
 
public void delete(User editor, InetDomain domain)
throws ModelException
{
if(!inetDomain.deleteableBy(editor))
if(!domain.deleteableBy(editor))
throw new ModelSecurityException();
 
try {
 
HibernateUtil.currentSession().delete(inetDomain);
HibernateUtil.currentSession().delete(domain);
}
catch(HibernateException ex)
{
175,14 → 204,38
}
}
 
private static InetDomainManager inetDomainManager = null;
 
public static InetDomainManager getInstance()
public Collection userBeforeDelete(User editor, User user)
throws ModelException
{
if(inetDomainManager == null)
inetDomainManager = new InetDomainManager();
Collection domains;
 
return inetDomainManager;
try {
domains = HibernateUtil.currentSession().find(
"from InetDomain where owner = ?",
user, Hibernate.entity(InetDomain.class) );
}
catch(HibernateException ex)
{
throw new ModelException(ex);
}
 
Collection cascade = new ArrayList();
for(Iterator i = domains.iterator(); i.hasNext(); ) {
InetDomain d = (InetDomain)i.next();
if(d.viewableBy(editor)) {
if(d.deleteableBy(editor))
cascade.add(new CascadeDeleteElement(d, CascadeDeleteElement.DELETE,
this.beforeDelete(editor, d)));
else
cascade.add(new CascadeDeleteElement(d, CascadeDeleteElement.FORBIDDEN, null));
}
else {
cascade.add(new CascadeDeleteElement(InetDomain.createLimitedCopy(d),
CascadeDeleteElement.FORBIDDEN, null));
}
}
 
return cascade;
}
 
public static final Comparator NAME_COMPARATOR = new NameComparator();
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/InetDomain.java
98,4 → 98,11
{
return editor.isSuperuser();
}
 
protected static InetDomain createLimitedCopy(InetDomain origin)
{
InetDomain d = new InetDomain();
d.setName(origin.getName());
return d;
}
}
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/UserBeforeDeleteListener.java
0,0 → 1,18
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface UserBeforeDeleteListener
{
/**
* called if some user is about to be deleted.
*
* @param editor who is doing the operation
* @param user the user to delete
* @return Collection(CascadeDeleteElement) - object which are touched by deleting the user
* FIXME: limit deep of load?
*/
public Collection userBeforeDelete(User editor, User user)
throws ModelException;
}