Subversion Repositories general

Compare Revisions

Ignore whitespace Rev 1062 → Rev 1061

/hostadmiral/trunk/doc/todo.txt
61,7 → 61,7
Add/delete passwords stores of existing DB objects if they are changed in config.
Double check concurency update.
Done
------------------------------------------------------------------------------------------------------------------------
/hostadmiral/trunk/src/ak/hostadmiral/listener/uservalidatoratdomain/UserValidatorAtDomain.java
File deleted
/hostadmiral/trunk/src/ak/hostadmiral/listener/uservalidatoratdomain/UserValidatorAtDomainMessages.properties
File deleted
/hostadmiral/trunk/src/ak/hostadmiral/core/model/InetDomainValidateListener.java
File deleted
/hostadmiral/trunk/src/ak/hostadmiral/core/model/UserValidateListener.java
File deleted
/hostadmiral/trunk/src/ak/hostadmiral/core/model/MailAliasValidateListener.java
File deleted
/hostadmiral/trunk/src/ak/hostadmiral/core/model/MailboxValidateListener.java
File deleted
/hostadmiral/trunk/src/ak/hostadmiral/core/model/SystemUserValidateListener.java
File deleted
/hostadmiral/trunk/src/ak/hostadmiral/core/model/MailAliasManager.java
22,7 → 22,6
{
private MailAliasStore store;
 
private Collection validateListeners = new ArrayList();
private Collection createdListeners = new ArrayList();
private Collection modifiedListeners = new ArrayList();
private Collection beforeDeleteListeners = new ArrayList();
85,21 → 84,12
public void save(User editor, MailAlias mailAlias)
throws ModelException
{
// security check
if(!mailAlias.editableBy(editor))
throw new ModelSecurityException();
 
//mailAlias.setModUser(editor); // FIXME
 
boolean isNew = mailAlias.isNew();
MailAlias oldMailAlias = mailAlias.getOrigin();
if(oldMailAlias == null) oldMailAlias = mailAlias;
 
// validate
for(Iterator i = validateListeners.iterator(); i.hasNext(); ) {
MailAliasValidateListener listener = (MailAliasValidateListener)i.next();
listener.mailAliasValidate(editor, mailAlias, oldMailAlias);
}
//mailAlias.setModUser(editor); // FIXME
 
store.save(mailAlias);
 
111,6 → 101,8
}
}
else {
MailAlias oldMailAlias = mailAlias.getOrigin();
if(oldMailAlias == null) oldMailAlias = mailAlias;
for(Iterator i = modifiedListeners.iterator(); i.hasNext(); ) {
MailAliasModifiedListener listener = (MailAliasModifiedListener)i.next();
listener.mailAliasModified(editor, mailAlias, oldMailAlias);
121,16 → 113,6
mailAlias.resetOrigin();
}
 
public void addValidateListener(MailAliasValidateListener listener)
{
validateListeners.add(listener);
}
 
public void removeValidateListener(MailAliasValidateListener listener)
{
validateListeners.remove(listener);
}
 
public void addCreatedListener(MailAliasCreatedListener listener)
{
createdListeners.add(listener);
/hostadmiral/trunk/src/ak/hostadmiral/core/model/UserManager.java
20,10 → 20,10
UserBeforeDeleteListener,
UserDeletingListener
{
private UserStore store;
private Class[] passwordStores;
private UserStore store;
private UserValidator userValidator;
private Class[] passwordStores;
 
private Collection validateListeners = new ArrayList();
private Collection createdListeners = new ArrayList();
private Collection modifiedListeners = new ArrayList();
private Collection beforeDeleteListeners = new ArrayList();
92,7 → 92,6
public void save(User editor, User user)
throws ModelException
{
// security check
if(!user.editableBy(editor) && !user.partEditableBy(editor)
&& !user.mayChangeSuperuser(editor))
{
99,18 → 98,13
throw new ModelSecurityException();
}
 
//user.setModUser(editor); // FIXME: disabled because hb throws exception
// if user edits itself
if(userValidator != null)
userValidator.validateUser(editor, user);
 
boolean isNew = user.isNew();
User oldUser = user.getOrigin();
if(oldUser == null) oldUser = user;
 
// validate
for(Iterator i = validateListeners.iterator(); i.hasNext(); ) {
UserValidateListener listener = (UserValidateListener)i.next();
listener.userValidate(editor, user, oldUser);
}
//user.setModUser(editor); // FIXME: disabled because hb throws exception
// if user edits itself
 
store.save(user);
 
129,6 → 123,8
}
}
else {
User oldUser = user.getOrigin();
if(oldUser == null) oldUser = user;
for(Iterator i = modifiedListeners.iterator(); i.hasNext(); ) {
UserModifiedListener listener = (UserModifiedListener)i.next();
listener.userModified(editor, user, oldUser);
139,16 → 135,6
user.resetOrigin();
}
 
public void addValidateListener(UserValidateListener listener)
{
validateListeners.add(listener);
}
 
public void removeValidateListener(UserValidateListener listener)
{
validateListeners.remove(listener);
}
 
public void addCreatedListener(UserCreatedListener listener)
{
createdListeners.add(listener);
421,6 → 407,12
Class c = Class.forName(((String[])params.get("store"))[0]);
store = (UserStore)c.newInstance();
 
String[] userValidatorName = (String[])params.get("userValidator");
if(userValidatorName != null) {
Class c2 = Class.forName(userValidatorName[0]);
userValidator = (UserValidator)c2.newInstance();
}
 
String[] passwordStoreNames = (String[])params.get("passwordStore");
if(passwordStoreNames != null) {
passwordStores = new Class[passwordStoreNames.length];
/hostadmiral/trunk/src/ak/hostadmiral/core/model/InetDomainManager.java
20,7 → 20,6
{
private InetDomainStore store;
 
private Collection validateListeners = new ArrayList();
private Collection createdListeners = new ArrayList();
private Collection modifiedListeners = new ArrayList();
private Collection beforeDeleteListeners = new ArrayList();
79,21 → 78,12
public void save(User editor, InetDomain domain)
throws ModelException
{
// security check
if(!domain.editableBy(editor))
throw new ModelSecurityException();
 
//domain.setModUser(editor); // FIXME
 
boolean isNew = domain.isNew();
InetDomain oldDomain = domain.getOrigin();
if(oldDomain == null) oldDomain = domain;
 
// validate
for(Iterator i = validateListeners.iterator(); i.hasNext(); ) {
InetDomainValidateListener listener = (InetDomainValidateListener)i.next();
listener.inetDomainValidate(editor, domain, oldDomain);
}
//domain.setModUser(editor); // FIXME
 
store.save(domain);
 
105,6 → 95,8
}
}
else {
InetDomain oldDomain = domain.getOrigin();
if(oldDomain == null) oldDomain = domain;
for(Iterator i = modifiedListeners.iterator(); i.hasNext(); ) {
InetDomainModifiedListener listener = (InetDomainModifiedListener)i.next();
listener.inetDomainModified(editor, domain, oldDomain);
115,16 → 107,6
domain.resetOrigin();
}
 
public void addValidateListener(InetDomainValidateListener listener)
{
validateListeners.add(listener);
}
 
public void removeValidateListener(InetDomainValidateListener listener)
{
validateListeners.remove(listener);
}
 
public void addCreatedListener(InetDomainCreatedListener listener)
{
createdListeners.add(listener);
/hostadmiral/trunk/src/ak/hostadmiral/core/model/MailboxManager.java
25,7 → 25,6
private MailboxStore store;
private Class[] passwordStores;
 
private Collection validateListeners = new ArrayList();
private Collection createdListeners = new ArrayList();
private Collection modifiedListeners = new ArrayList();
private Collection beforeDeleteListeners = new ArrayList();
91,21 → 90,12
public void save(User editor, Mailbox mailbox)
throws ModelException
{
// security check
if(!mailbox.editableBy(editor))
throw new ModelSecurityException();
 
//mailbox.setModUser(editor); // FIXME
 
boolean isNew = mailbox.isNew();
Mailbox oldMailbox = mailbox.getOrigin();
if(oldMailbox == null) oldMailbox = mailbox;
 
// validate
for(Iterator i = validateListeners.iterator(); i.hasNext(); ) {
MailboxValidateListener listener = (MailboxValidateListener)i.next();
listener.mailboxValidate(editor, mailbox, oldMailbox);
}
//mailbox.setModUser(editor); // FIXME
 
store.save(mailbox);
 
117,6 → 107,8
}
}
else {
Mailbox oldMailbox = mailbox.getOrigin();
if(oldMailbox == null) oldMailbox = mailbox;
for(Iterator i = modifiedListeners.iterator(); i.hasNext(); ) {
MailboxModifiedListener listener = (MailboxModifiedListener)i.next();
listener.mailboxModified(editor, mailbox, oldMailbox);
127,16 → 119,6
mailbox.resetOrigin();
}
 
public void addValidateListener(MailboxValidateListener listener)
{
validateListeners.add(listener);
}
 
public void removeValidateListener(MailboxValidateListener listener)
{
validateListeners.remove(listener);
}
 
public void addCreatedListener(MailboxCreatedListener listener)
{
createdListeners.add(listener);
/hostadmiral/trunk/src/ak/hostadmiral/core/model/SystemUserManager.java
20,7 → 20,6
{
private SystemUserStore store;
 
private Collection validateListeners = new ArrayList();
private Collection createdListeners = new ArrayList();
private Collection modifiedListeners = new ArrayList();
private Collection beforeDeleteListeners = new ArrayList();
95,21 → 94,12
public void save(User editor, SystemUser systemUser)
throws ModelException
{
// security check
if(!systemUser.editableBy(editor))
throw new ModelSecurityException();
 
//systemUser.setModUser(editor); // FIXME
 
boolean isNew = systemUser.isNew();
SystemUser oldSystemUser = systemUser.getOrigin();
if(oldSystemUser == null) oldSystemUser = systemUser;
 
// validate
for(Iterator i = validateListeners.iterator(); i.hasNext(); ) {
SystemUserValidateListener listener = (SystemUserValidateListener)i.next();
listener.systemUserValidate(editor, systemUser, oldSystemUser);
}
//systemUser.setModUser(editor); // FIXME
 
store.save(systemUser);
 
121,6 → 111,8
}
}
else {
SystemUser oldSystemUser = systemUser.getOrigin();
if(oldSystemUser == null) oldSystemUser = systemUser;
for(Iterator i = modifiedListeners.iterator(); i.hasNext(); ) {
SystemUserModifiedListener listener = (SystemUserModifiedListener)i.next();
listener.systemUserModified(editor, systemUser, oldSystemUser);
131,16 → 123,6
systemUser.resetOrigin();
}
 
public void addValidateListener(SystemUserValidateListener listener)
{
validateListeners.add(listener);
}
 
public void removeValidateListener(SystemUserValidateListener listener)
{
validateListeners.remove(listener);
}
 
public void addCreatedListener(SystemUserCreatedListener listener)
{
createdListeners.add(listener);
/hostadmiral/trunk/src/ak/hostadmiral/core/model/UserValidatorAtDomain.java
0,0 → 1,36
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import java.util.Iterator;
import ak.hostadmiral.util.ModelException;
import ak.hostadmiral.util.ModelUserException;
 
public class UserValidatorAtDomain
implements UserValidator
{
public void validateUser(User editor, User user)
throws ModelException
{
// superuser
if(editor.isSuperuser()) return;
 
// name not changed
if(user.getOrigin() != null && user.getOrigin().getLogin() != null
&& user.getLogin().equals(user.getOrigin().getLogin()))
{
return;
}
 
// go throug all domains
Collection domains = InetDomainManager.getInstance().listInetDomains(editor);
for(Iterator i = domains.iterator(); i.hasNext(); ) {
InetDomain domain = (InetDomain)i.next();
 
if(user.getLogin().endsWith("@" + domain.getName()))
return;
}
 
// nothing found
throw new ModelUserException("ak.hostadmiral.core.uservalidator.atdomain.login.wrong");
}
}
/hostadmiral/trunk/src/ak/hostadmiral/core/model/UserValidator.java
0,0 → 1,9
package ak.hostadmiral.core.model;
 
import ak.hostadmiral.util.ModelException;
 
public interface UserValidator
{
public void validateUser(User editor, User user)
throws ModelException;
}
/hostadmiral/trunk/src/ak/hostadmiral/core/model/SystemUserDeletingListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface SystemUserDeletingListener
/hostadmiral/trunk/src/ak/hostadmiral/core/model/MailboxDeletingListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface MailboxDeletingListener
/hostadmiral/trunk/src/ak/hostadmiral/core/model/MailAliasDeletingListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface MailAliasDeletingListener
/hostadmiral/trunk/src/ak/hostadmiral/core/model/InetDomainDeletingListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface InetDomainDeletingListener
/hostadmiral/trunk/src/ak/hostadmiral/core/model/UserDeletingListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface UserDeletingListener
/hostadmiral/trunk/src/ak/hostadmiral/core/model/InetDomainModifiedListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface InetDomainModifiedListener
/hostadmiral/trunk/src/ak/hostadmiral/core/model/SystemUserDeletedListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface SystemUserDeletedListener
/hostadmiral/trunk/src/ak/hostadmiral/core/model/SystemUserCreatedListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface SystemUserCreatedListener
/hostadmiral/trunk/src/ak/hostadmiral/core/model/MailboxDeletedListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface MailboxDeletedListener
/hostadmiral/trunk/src/ak/hostadmiral/core/model/MailboxCreatedListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface MailboxCreatedListener
/hostadmiral/trunk/src/ak/hostadmiral/core/model/SystemUserModifiedListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface SystemUserModifiedListener
/hostadmiral/trunk/src/ak/hostadmiral/core/model/MailboxModifiedListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface MailboxModifiedListener
/hostadmiral/trunk/src/ak/hostadmiral/core/model/MailAliasModifiedListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface MailAliasModifiedListener
/hostadmiral/trunk/src/ak/hostadmiral/core/model/InetDomainDeletedListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface InetDomainDeletedListener
/hostadmiral/trunk/src/ak/hostadmiral/core/model/InetDomainCreatedListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface InetDomainCreatedListener
/hostadmiral/trunk/src/ak/hostadmiral/core/model/MailAliasDeletedListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface MailAliasDeletedListener
/hostadmiral/trunk/src/ak/hostadmiral/core/model/MailAliasCreatedListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface MailAliasCreatedListener
/hostadmiral/trunk/src/ak/hostadmiral/core/model/UserDeletedListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface UserDeletedListener
/hostadmiral/trunk/src/ak/hostadmiral/core/model/UserCreatedListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface UserCreatedListener
/hostadmiral/trunk/src/ak/hostadmiral/core/model/UserModifiedListener.java
1,5 → 1,6
package ak.hostadmiral.core.model;
 
import java.util.Collection;
import ak.hostadmiral.util.ModelException;
 
public interface UserModifiedListener
/hostadmiral/trunk/src/ak/hostadmiral/core/resources/CoreMessages.properties
56,3 → 56,5
ak.hostadmiral.core.domain.edit.name.empty=Please enter domain name
 
ak.hostadmiral.core.mail.alias.edit.id.wrong=Please select an alias from the list
 
ak.hostadmiral.core.uservalidator.atdomain.login.wrong=User login must end with name of your domain, e.g. me@example.com
/hostadmiral/trunk/src/ak/hostadmiral/core/Locales.java
2,7 → 2,6
 
import java.util.Locale;
 
// FIXME: make this list as text file or build it directly from resources
public abstract class Locales
{
private static final Locale[] locales = {
/hostadmiral/trunk/src/ak/hostadmiral/struts/MultiPropertyMessageResources.java
1,14 → 1,8
package ak.hostadmiral.struts;
 
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
import org.apache.struts.util.PropertyMessageResources;
 
import ak.hostadmiral.util.ResourceManager;
import ak.hostadmiral.util.ResourceAddedListener;
 
/**
* Extention of PropertyMessageResources to work with multiple
* resource files, specified as semicolomn separated list.
16,17 → 10,15
*/
public class MultiPropertyMessageResources
extends PropertyMessageResources
implements ResourceAddedListener
{
private List multiLocales = new ArrayList(); // List(HashMap)
private List multiConfig = new ArrayList(); // List(String)
private HashMap[] multiLocales;
private String[] multiConfig;
 
public MultiPropertyMessageResources(MultiPropertyMessageResourcesFactory factory,
String config)
{
super(factory, config);
initMultiConfig(config);
ResourceManager.getInstance().addAddedListener(this);
initMultiConfig(config);
}
 
public MultiPropertyMessageResources(MultiPropertyMessageResourcesFactory factory,
34,14 → 26,13
{
super(factory, config, returnNull);
initMultiConfig(config);
ResourceManager.getInstance().addAddedListener(this);
}
 
protected synchronized void loadLocale(String localeKey)
{
for(int i = 0; i < multiConfig.size(); i++) {
config = (String)multiConfig.get(i);
locales = (HashMap)multiLocales.get(i);
for(int i = 0; i < multiConfig.length; i++) {
config = multiConfig[i];
locales = multiLocales[i];
super.loadLocale(localeKey);
}
}
48,24 → 39,10
 
protected void initMultiConfig(String cfg)
{
// from struts-config.xml
String[] strs = cfg.split("\\s*;\\s*");
this.multiConfig = cfg.split("\\s*;\\s*");
 
for(int i = 0; i < strs.length; i++) {
this.multiConfig.add(strs[i]);
this.multiLocales.add(new HashMap());
}
 
// from resource manager
for(Iterator i = ResourceManager.getInstance().getResources().iterator(); i.hasNext(); ) {
this.multiConfig.add((String)i.next());
this.multiLocales.add(new HashMap());
}
this.multiLocales = new HashMap[this.multiConfig.length];
for(int i = 0; i < this.multiLocales.length; i++)
this.multiLocales[i] = new HashMap();
}
 
public void resourceAdded(String resourceName)
{
this.multiConfig.add(resourceName);
this.multiLocales.add(new HashMap());
}
}
/hostadmiral/trunk/src/ak/hostadmiral/util/ResourceAddedListener.java
File deleted
/hostadmiral/trunk/src/ak/hostadmiral/util/ResourceManager.java
File deleted
/hostadmiral/trunk/webapp/WEB-INF/conf/hostadmiral_config.xml.default
47,11 → 47,7
only such classes can have init params. Otherwise the class is just called by "forName"
and can use static initializers.
-->
<initializations>
<!-- Utils -->
<initialization>
<class>ak.hostadmiral.util.ResourceManager</class>
</initialization>
<initializations>
<!-- Core classes -->
<initialization>
<class>ak.hostadmiral.core.model.UserManager</class>
60,6 → 56,10
<param-value>ak.hostadmiral.core.model.store.hibernate.UserHibernate</param-value>
</init-param>
<init-param>
<param-name>userValidator</param-name>
<param-value>ak.hostadmiral.core.model.UserValidatorAtDomain</param-value>
</init-param>
<init-param>
<param-name>passwordStore</param-name>
<param-value>ak.hostadmiral.core.model.PasswordStoreMd5</param-value>
<param-value>ak.hostadmiral.core.model.PasswordStoreCrypt</param-value>
106,6 → 106,6
<param-name>store</param-name>
<param-value>ak.hostadmiral.core.model.store.hibernate.MailAliasDestinationHibernate</param-value>
</init-param>
</initialization>
</initialization>
</initializations>
</hostadmiral>