/** * Copyright (c) 2012 Todoroo Inc * * See the file "LICENSE" for the full license governing this code. */ package com.todoroo.astrid.service; import com.todoroo.andlib.service.AbstractDependencyInjector; import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.ExceptionService.AndroidLogReporter; import com.todoroo.andlib.service.ExceptionService.ErrorReporter; import com.todoroo.andlib.service.HttpRestClient; import com.todoroo.astrid.actfm.sync.ActFmInvoker; import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; import com.todoroo.astrid.actfm.sync.ActFmSyncService; import com.todoroo.astrid.dao.ABTestEventDao; import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.dao.HistoryDao; import com.todoroo.astrid.dao.MetadataDao; import com.todoroo.astrid.dao.StoreObjectDao; import com.todoroo.astrid.dao.TagDataDao; import com.todoroo.astrid.dao.TagMetadataDao; import com.todoroo.astrid.dao.TagOutstandingDao; import com.todoroo.astrid.dao.TaskAttachmentDao; import com.todoroo.astrid.dao.TaskAttachmentOutstandingDao; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskListMetadataDao; import com.todoroo.astrid.dao.TaskListMetadataOutstandingDao; import com.todoroo.astrid.dao.TaskOutstandingDao; import com.todoroo.astrid.dao.UpdateDao; import com.todoroo.astrid.dao.UserActivityDao; import com.todoroo.astrid.dao.UserActivityOutstandingDao; import com.todoroo.astrid.dao.UserDao; import com.todoroo.astrid.dao.WaitingOnMeDao; import com.todoroo.astrid.dao.WaitingOnMeOutstandingDao; import com.todoroo.astrid.gtasks.GtasksListService; import com.todoroo.astrid.gtasks.GtasksMetadataService; import com.todoroo.astrid.gtasks.GtasksPreferenceService; import com.todoroo.astrid.gtasks.GtasksTaskListUpdater; import com.todoroo.astrid.gtasks.sync.GtasksSyncService; import com.todoroo.astrid.service.abtesting.ABChooser; import com.todoroo.astrid.service.abtesting.ABTestEventReportingService; import com.todoroo.astrid.service.abtesting.ABTestInvoker; import com.todoroo.astrid.service.abtesting.ABTests; import com.todoroo.astrid.tags.TagService; import com.todoroo.astrid.utility.Constants; /** * Astrid application dependency injector loads classes in Astrid with the * appropriate instantiated objects necessary for their operation. For * more information on Dependency Injection, see {@link DependencyInjectionService} * and {@link AbstractDependencyInjector}. * * @author Tim Su <tim@todoroo.com> * */ public class AstridDependencyInjector extends AbstractDependencyInjector { /** * Boolean bit to prevent multiple copies of this injector to be loaded */ private static AstridDependencyInjector instance = null; /** * Initialize list of injectables. Special care must used when * instantiating classes that themselves depend on dependency injection * (i.e. {@link ErrorReporter}. */ @Override @SuppressWarnings("nls") protected void addInjectables() { injectables.put("debug", Constants.DEBUG); // com.todoroo.android.service injectables.put("applicationName", "astrid"); injectables.put("restClient", HttpRestClient.class); // com.todoroo.astrid.dao injectables.put("database", Database.class); injectables.put("taskDao", TaskDao.class); injectables.put("metadataDao", MetadataDao.class); injectables.put("tagMetadataDao", TagMetadataDao.class); injectables.put("tagDataDao", TagDataDao.class); injectables.put("storeObjectDao", StoreObjectDao.class); injectables.put("updateDao", UpdateDao.class); injectables.put("userActivityDao", UserActivityDao.class); injectables.put("userDao", UserDao.class); injectables.put("taskOutstandingDao", TaskOutstandingDao.class); injectables.put("tagOutstandingDao", TagOutstandingDao.class); injectables.put("userActivityOutstandingDao", UserActivityOutstandingDao.class); injectables.put("historyDao", HistoryDao.class); injectables.put("taskAttachmentDao", TaskAttachmentDao.class); injectables.put("taskAttachmentOutstandingDao", TaskAttachmentOutstandingDao.class); injectables.put("taskListMetadataDao", TaskListMetadataDao.class); injectables.put("taskListMetadataOutstandingDao", TaskListMetadataOutstandingDao.class); injectables.put("waitingOnMeDao", WaitingOnMeDao.class); injectables.put("waitingOnMeOutstandingDao", WaitingOnMeOutstandingDao.class); // com.todoroo.astrid.service injectables.put("taskService", TaskService.class); injectables.put("metadataService", MetadataService.class); injectables.put("tagDataService", TagDataService.class); injectables.put("upgradeService", UpgradeService.class); injectables.put("addOnService", AddOnService.class); injectables.put("syncService", SyncV2Service.class); // com.timsu.astrid.data injectables.put("tasksTable", "tasks"); injectables.put("tagsTable", "tags"); injectables.put("tagTaskTable", "tagTaskMap"); injectables.put("alertsTable", "alerts"); injectables.put("syncTable", "sync"); // com.todoroo.astrid.sharing injectables.put("actFmPreferenceService", ActFmPreferenceService.class); injectables.put("actFmInvoker", ActFmInvoker.class); injectables.put("actFmSyncService", ActFmSyncService.class); // com.todoroo.astrid.gtasks injectables.put("gtasksPreferenceService", GtasksPreferenceService.class); injectables.put("gtasksListService", GtasksListService.class); injectables.put("gtasksMetadataService", GtasksMetadataService.class); injectables.put("gtasksTaskListUpdater", GtasksTaskListUpdater.class); injectables.put("gtasksSyncService", GtasksSyncService.class); // AB testing injectables.put("abChooser", ABChooser.class); injectables.put("abTests", new ABTests()); injectables.put("abTestEventDao", ABTestEventDao.class); injectables.put("abTestEventReportingService", ABTestEventReportingService.class); injectables.put("abTestInvoker", ABTestInvoker.class); // com.todoroo.astrid.tags injectables.put("tagService", TagService.class); // these make reference to fields defined above injectables.put("errorReporters", new ErrorReporter[] { new AndroidLogReporter(), }); } /** * Install this service as the default Dependency Injector */ public static void initialize() { if(instance != null) return; synchronized(AstridDependencyInjector.class) { if(instance == null) instance = new AstridDependencyInjector(); DependencyInjectionService.getInstance().addInjector(instance); } } AstridDependencyInjector() { // prevent instantiation super(); } /** * Flush dependency injection cache. Useful for unit tests. */ public synchronized static void flush() { instance.flushCreated(); } }