package com.mossle.auth.support; import javax.annotation.PostConstruct; import com.mossle.api.tenant.TenantConnector; import com.mossle.api.user.UserConnector; import com.mossle.api.userauth.UserAuthCache; import com.mossle.api.userauth.UserAuthConnector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.FactoryBean; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.util.Assert; public class UserAuthConnectorFactoryBean implements FactoryBean { private static Logger logger = LoggerFactory .getLogger(UserAuthConnectorFactoryBean.class); private UserAuthConnector userAuthConnector; private TenantConnector tenantConnector; private UserConnector userConnector; private String type = "database"; private JdbcTemplate jdbcTemplate; private UserAuthCache userAuthCache; private String sqlFindPermissions; private String sqlFindRoles; @PostConstruct public void afterPropertiesSet() { Assert.notNull(type, "type cannot be null"); Assert.notNull(userConnector, "userConnector cannot be null"); Assert.notNull(tenantConnector, "tenantConnector cannot be null"); if ("mock".equals(type)) { this.processMock(); } else if ("database".equals(type)) { this.processDatabase(); } else { throw new IllegalArgumentException("unsupported type : " + type); } } public void processMock() { MockUserAuthConnector mockUserAuthConnector = new MockUserAuthConnector(); userAuthConnector = mockUserAuthConnector; } public void processDatabase() { Assert.notNull(jdbcTemplate, "jdbcTemplate cannot be null"); DatabaseUserAuthConnector databaseUserAuthConnector = new DatabaseUserAuthConnector(); databaseUserAuthConnector.setJdbcTemplate(jdbcTemplate); databaseUserAuthConnector.setUserConnector(userConnector); databaseUserAuthConnector.setTenantConnector(tenantConnector); if (sqlFindPermissions != null) { databaseUserAuthConnector.setSqlFindPermission(sqlFindPermissions); } if (sqlFindRoles != null) { databaseUserAuthConnector.setSqlFindRole(sqlFindRoles); } if (userAuthCache != null) { logger.debug("use cache for UserAuthConnector"); UserAuthConnectorWrapper userAuthConnectorWrapper = new UserAuthConnectorWrapper(); userAuthConnectorWrapper .setUserAuthConnector(databaseUserAuthConnector); userAuthConnectorWrapper.setUserAuthCache(userAuthCache); userAuthConnector = userAuthConnectorWrapper; } else { userAuthConnector = databaseUserAuthConnector; } } public Object getObject() { return userAuthConnector; } public Class getObjectType() { return UserAuthConnector.class; } public boolean isSingleton() { return true; } public void setType(String type) { this.type = type; } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public void setTenantConnector(TenantConnector tenantConnector) { this.tenantConnector = tenantConnector; } public void setUserConnector(UserConnector userConnector) { this.userConnector = userConnector; } public void setUserAuthCache(UserAuthCache userAuthCache) { this.userAuthCache = userAuthCache; } public void setSqlFindPermission(String sqlFindPermissions) { this.sqlFindPermissions = sqlFindPermissions; } public void setSqlFindRole(String sqlFindRoles) { this.sqlFindRoles = sqlFindRoles; } }