package org.openbakery.racecontrol.service; import java.util.Map; import org.openbakery.racecontrol.web.RaceControlWebApplication; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; public class ServiceLocator { private LoginService loginService; private RaceService raceService; private DatabaseService databaseService; private SettingsService settingsService; public SettingsService getSettingsService() { return settingsService; } @Autowired public void setSettingsService(SettingsService settingsService) { this.settingsService = settingsService; } public DatabaseService getDatabaseService() { return databaseService; } @Autowired public void setDatabaseService(DatabaseService databaseService) { this.databaseService = databaseService; } public RaceService getRaceService() { return raceService; } @Autowired public void setRaceService(RaceService raceService) { this.raceService = raceService; } public LoginService getLoginService() { return loginService; } @Autowired public void setLoginService(LoginService loginService) { this.loginService = loginService; } public Object getService(Class<? extends Object> clazz) throws ServiceLocateException { RaceControlWebApplication application = (RaceControlWebApplication) RaceControlWebApplication.get(); ApplicationContext context = application.getContext(); Map beanMap = context.getBeansOfType(clazz); if (beanMap.size() == 1) { return beanMap.values().iterator().next(); } throw new ServiceLocateException("Unable to locate Service " + clazz + ":" + beanMap); } }