X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=security%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fusermgt%2FUserAdministrationComponent.java;h=d1f6a87ab206099fc86d6180e9eeb20600fdee9d;hb=b7f387ca0178938325ce7107222188d3912fc1cb;hp=9c11c1b4d98c2ab1bb40f49c91985b6b758d544a;hpb=f8fdb7bee21b0d67f74cae9643d8955276e1b848;p=utils diff --git a/security/src/main/java/org/wamblee/usermgt/UserAdministrationComponent.java b/security/src/main/java/org/wamblee/usermgt/UserAdministrationComponent.java index 9c11c1b4..d1f6a87a 100644 --- a/security/src/main/java/org/wamblee/usermgt/UserAdministrationComponent.java +++ b/security/src/main/java/org/wamblee/usermgt/UserAdministrationComponent.java @@ -19,42 +19,88 @@ import java.io.IOException; import javax.sql.DataSource; -import org.hibernate.cache.EhCacheProvider; +import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.transaction.PlatformTransactionManager; +import org.wamblee.cache.EhCache; import org.wamblee.system.adapters.DefaultContainer; import org.wamblee.system.core.Component; import org.wamblee.system.core.DefaultProvidedInterface; import org.wamblee.system.core.DefaultRequiredInterface; +import org.wamblee.system.core.ProvidedInterface; +import org.wamblee.system.core.Scope; import org.wamblee.usermgt.hibernate.UsermgtHibernateMappingFiles; public class UserAdministrationComponent extends DefaultContainer { + private ProvidedInterface TRANSACTION_MGR = new DefaultProvidedInterface( + "transactionManager", PlatformTransactionManager.class); + private ProvidedInterface USER_CACHE = new DefaultProvidedInterface( + "userCache", EhCache.class); + private ProvidedInterface HIBERNATE_TEMPLATE = new DefaultProvidedInterface( + "hibernateTemplate", HibernateTemplate.class); + private ProvidedInterface USER_MGT = new DefaultProvidedInterface( + "usermgt", UserAdministration.class); + + private Component _hibernate; + private Component _repository; + private Component _usermgt; + + private boolean _exposeInternals; + public UserAdministrationComponent(String aName, boolean aExposeInternals) throws IOException { super(aName); + _exposeInternals = aExposeInternals; + addComponent("mappingFiles", new UsermgtHibernateMappingFiles()); - Component hibernate = new HibernateComponent("hibernate"); - addComponent(hibernate); - Component repository = new UserGroupRepositoryComponent( - "usersgroups"); - addComponent(repository); + _hibernate = new HibernateComponent("hibernate"); + addComponent(_hibernate); + + _repository = new UserGroupRepositoryComponent("usersgroups"); + addComponent(_repository); - Component usermgt = new UserAdministrationLightComponent( - "usermgtlight"); - addComponent(usermgt); + _usermgt = new UserAdministrationLightComponent("usermgtlight"); + addComponent(_usermgt); addRequiredInterface(new DefaultRequiredInterface("datasource", DataSource.class)); if (aExposeInternals) { - addProvidedInterface(new DefaultProvidedInterface( - "transactionManager", PlatformTransactionManager.class)); - addProvidedInterface(new DefaultProvidedInterface("userCache", - EhCacheProvider.class)); + addProvidedInterface(TRANSACTION_MGR); + addProvidedInterface(USER_CACHE); + addProvidedInterface(HIBERNATE_TEMPLATE); + } + addProvidedInterface(USER_MGT); + } + + @Override + protected Scope doStart(Scope aExternalScope) { + + Scope scope = super.doStart(aExternalScope); + if (_exposeInternals) { + addInterface(TRANSACTION_MGR, getInterfaceImplementation( + TRANSACTION_MGR, _hibernate, scope), aExternalScope); + addInterface(USER_CACHE, getInterfaceImplementation(USER_CACHE, + _repository, scope), aExternalScope); + addInterface(HIBERNATE_TEMPLATE, getInterfaceImplementation( + HIBERNATE_TEMPLATE, _hibernate, scope), aExternalScope); } - addProvidedInterface(new DefaultProvidedInterface("usermgt", - UserAdministration.class)); + addInterface(USER_MGT, getInterfaceImplementation(USER_MGT, _usermgt, + scope), aExternalScope); + return scope; + } + + private Object getInterfaceImplementation(ProvidedInterface aInterface, + Component aSource, Scope aScope) { + for (ProvidedInterface provided : aSource.getProvidedInterfaces()) { + if (provided.equals(aInterface)) { + return aScope + .getInterfaceImplementation(provided, Object.class); + } + } + throw new IllegalArgumentException("Provided interface '" + aInterface + + "' not found in component '" + aSource + "'"); } }