/** * Copyright (c) 2012 Todoroo Inc * * See the file "LICENSE" for the full license governing this code. */ package com.todoroo.astrid.core; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.ExceptionService; import com.todoroo.andlib.sql.Query; import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.dao.HistoryDao; import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; 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.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.data.Metadata; import com.todoroo.astrid.gtasks.GtasksPreferenceService; import com.todoroo.astrid.service.AddOnService; import com.todoroo.astrid.service.AstridDependencyInjector; import com.todoroo.astrid.service.MetadataService; import com.todoroo.astrid.service.TagDataService; import com.todoroo.astrid.service.TaskService; /** * Utility class for getting dependency-injected services from plugins * * @author Tim Su <tim@todoroo.com> * */ public final class PluginServices { @Autowired TaskService taskService; @Autowired TaskDao taskDao; @Autowired Database database; @Autowired ExceptionService exceptionService; @Autowired MetadataService metadataService; @Autowired TagMetadataDao tagMetadataDao; @Autowired AddOnService addOnService; @Autowired TagDataService tagDataService; @Autowired TagDataDao tagDataDao; @Autowired StoreObjectDao storeObjectDao; @Autowired UserDao userDao; @Autowired UserActivityDao userActivityDao; @Autowired UserActivityOutstandingDao userActivityOutstandingDao; @Autowired TaskOutstandingDao taskOutstandingDao; @Autowired TagOutstandingDao tagOutstandingDao; @Autowired HistoryDao historyDao; @Autowired TaskAttachmentDao taskAttachmentDao; @Autowired TaskAttachmentOutstandingDao taskAttachmentOutstandingDao; @Autowired TaskListMetadataDao taskListMetadataDao; @Autowired TaskListMetadataOutstandingDao taskListMetadataOutstandingDao; @Autowired WaitingOnMeDao waitingOnMeDao; @Autowired WaitingOnMeOutstandingDao waitingOnMeOutstandingDao; @Autowired ActFmPreferenceService actFmPreferenceService; @Autowired GtasksPreferenceService gtasksPreferenceService; private static volatile PluginServices instance; static { AstridDependencyInjector.initialize(); } private PluginServices() { DependencyInjectionService.getInstance().inject(this); } private static PluginServices getInstance() { if(instance == null) { synchronized (PluginServices.class) { if (instance == null) instance = new PluginServices(); } } return instance; } public static Database getDatabase() { getInstance().database.openForWriting(); return getInstance().database; } public static TaskService getTaskService() { getInstance().database.openForWriting(); return getInstance().taskService; } public static TaskDao getTaskDao() { return getInstance().taskDao; } public static TagDataService getTagDataService() { return getInstance().tagDataService; } public static TagDataDao getTagDataDao() { return getInstance().tagDataDao; } public static UserActivityDao getUserActivityDao() { return getInstance().userActivityDao; } public static TagMetadataDao getTagMetadataDao() { return getInstance().tagMetadataDao; } public static TaskOutstandingDao getTaskOutstandingDao() { return getInstance().taskOutstandingDao; } public static TagOutstandingDao getTagOutstandingDao() { return getInstance().tagOutstandingDao; } public static UserActivityOutstandingDao getUserActivityOutstandingDao() { return getInstance().userActivityOutstandingDao; } public static ExceptionService getExceptionService() { return getInstance().exceptionService; } public static MetadataService getMetadataService() { getInstance().database.openForWriting(); return getInstance().metadataService; } public static AddOnService getAddOnService() { return getInstance().addOnService; } public static StoreObjectDao getStoreObjectDao() { return getInstance().storeObjectDao; } public static UserDao getUserDao() { return getInstance().userDao; } public static HistoryDao getHistoryDao() { return getInstance().historyDao; } public static TaskAttachmentDao getTaskAttachmentDao() { return getInstance().taskAttachmentDao; } public static TaskAttachmentOutstandingDao getTaskAttachmentOutstandingDao() { return getInstance().taskAttachmentOutstandingDao; } public static TaskListMetadataDao getTaskListMetadataDao() { return getInstance().taskListMetadataDao; } public static TaskListMetadataOutstandingDao getTaskListMetadataOutstandingDao() { return getInstance().taskListMetadataOutstandingDao; } public static WaitingOnMeDao getWaitingOnMeDao() { return getInstance().waitingOnMeDao; } public static WaitingOnMeOutstandingDao getWaitingOnMeOutstandingDao() { return getInstance().waitingOnMeOutstandingDao; } public static ActFmPreferenceService getActFmPreferenceService() { return getInstance().actFmPreferenceService; } public static GtasksPreferenceService getGtasksPreferenceService() { return getInstance().gtasksPreferenceService; } // -- helpers /** * Find the corresponding metadata for this task */ public static Metadata getMetadataByTaskAndWithKey(long taskId, String metadataKey) { TodorooCursor<Metadata> cursor = PluginServices.getMetadataService().query(Query.select( Metadata.PROPERTIES).where(MetadataCriteria.byTaskAndwithKey(taskId, metadataKey))); try { if(cursor.getCount() > 0) { cursor.moveToNext(); return new Metadata(cursor); } else return null; } finally { cursor.close(); } } }