/src/main/java/org/broadinstitute/consent/http/ConsentModule.java

https://github.com/DataBiosphere/consent · Java · 381 lines · 330 code · 50 blank · 1 comment · 2 complexity · b509d57f4575dd6b43cf56e79fed7755 MD5 · raw file

  1. package org.broadinstitute.consent.http;
  2. import com.github.fakemongo.Fongo;
  3. import com.google.inject.AbstractModule;
  4. import com.google.inject.Inject;
  5. import com.google.inject.Provides;
  6. import com.mongodb.MongoClient;
  7. import io.dropwizard.Configuration;
  8. import io.dropwizard.client.JerseyClientBuilder;
  9. import io.dropwizard.jdbi3.JdbiFactory;
  10. import io.dropwizard.setup.Environment;
  11. import org.broadinstitute.consent.http.cloudstore.GCSService;
  12. import org.broadinstitute.consent.http.cloudstore.GCSStore;
  13. import org.broadinstitute.consent.http.configurations.ConsentConfiguration;
  14. import org.broadinstitute.consent.http.configurations.MongoConfiguration;
  15. import org.broadinstitute.consent.http.db.ApprovalExpirationTimeDAO;
  16. import org.broadinstitute.consent.http.db.AssociationDAO;
  17. import org.broadinstitute.consent.http.db.ConsentDAO;
  18. import org.broadinstitute.consent.http.db.DACUserDAO;
  19. import org.broadinstitute.consent.http.db.DacDAO;
  20. import org.broadinstitute.consent.http.db.DataAccessRequestDAO;
  21. import org.broadinstitute.consent.http.db.DataSetAssociationDAO;
  22. import org.broadinstitute.consent.http.db.DataSetAuditDAO;
  23. import org.broadinstitute.consent.http.db.DataSetDAO;
  24. import org.broadinstitute.consent.http.db.ElectionDAO;
  25. import org.broadinstitute.consent.http.db.HelpReportDAO;
  26. import org.broadinstitute.consent.http.db.MailMessageDAO;
  27. import org.broadinstitute.consent.http.db.MailServiceDAO;
  28. import org.broadinstitute.consent.http.db.MatchDAO;
  29. import org.broadinstitute.consent.http.db.ResearcherPropertyDAO;
  30. import org.broadinstitute.consent.http.db.UserRoleDAO;
  31. import org.broadinstitute.consent.http.db.VoteDAO;
  32. import org.broadinstitute.consent.http.db.WorkspaceAuditDAO;
  33. import org.broadinstitute.consent.http.db.mongo.MongoConsentDB;
  34. import org.broadinstitute.consent.http.mail.MailService;
  35. import org.broadinstitute.consent.http.mail.freemarker.FreeMarkerTemplateHelper;
  36. import org.broadinstitute.consent.http.service.ConsentService;
  37. import org.broadinstitute.consent.http.service.DacService;
  38. import org.broadinstitute.consent.http.service.DataAccessRequestService;
  39. import org.broadinstitute.consent.http.service.ElectionService;
  40. import org.broadinstitute.consent.http.service.EmailNotifierService;
  41. import org.broadinstitute.consent.http.service.PendingCaseService;
  42. import org.broadinstitute.consent.http.service.UseRestrictionConverter;
  43. import org.broadinstitute.consent.http.service.UserService;
  44. import org.broadinstitute.consent.http.service.VoteService;
  45. import org.broadinstitute.consent.http.service.WhitelistService;
  46. import org.broadinstitute.consent.http.util.WhitelistCache;
  47. import org.jdbi.v3.core.Jdbi;
  48. import org.jdbi.v3.gson2.Gson2Plugin;
  49. import org.jdbi.v3.guava.GuavaPlugin;
  50. import org.jdbi.v3.sqlobject.SqlObjectPlugin;
  51. import javax.ws.rs.client.Client;
  52. public class ConsentModule extends AbstractModule {
  53. @Inject
  54. private final ConsentConfiguration config;
  55. @Inject
  56. private final Environment environment;
  57. private final Client client;
  58. private final Jdbi jdbi;
  59. private final MongoConsentDB mongoInstance;
  60. private final ConsentDAO consentDAO;
  61. private final ElectionDAO electionDAO;
  62. private final HelpReportDAO helpReportDAO;
  63. private final VoteDAO voteDAO;
  64. private final DataSetDAO datasetDAO;
  65. private final DataSetAssociationDAO datasetAssociationDAO;
  66. private final DacDAO dacDAO;
  67. private final DACUserDAO dacUserDAO;
  68. private final UserRoleDAO userRoleDAO;
  69. private final MatchDAO matchDAO;
  70. private final MailMessageDAO mailMessageDAO;
  71. private final ApprovalExpirationTimeDAO approvalExpirationTimeDAO;
  72. private final DataSetAuditDAO datasetAuditDAO;
  73. private final MailServiceDAO mailServiceDAO;
  74. private final ResearcherPropertyDAO researcherPropertyDAO;
  75. private final WorkspaceAuditDAO workspaceAuditDAO;
  76. private final AssociationDAO associationDAO;
  77. private final DataAccessRequestDAO dataAccessRequestDAO;
  78. public static final String DB_ENV = "postgresql";
  79. ConsentModule(ConsentConfiguration consentConfiguration, Environment environment) {
  80. this.config = consentConfiguration;
  81. this.environment = environment;
  82. this.client = new JerseyClientBuilder(environment)
  83. .using(config.getJerseyClientConfiguration())
  84. .build(this.getClass().getName());
  85. this.jdbi = new JdbiFactory().build(environment, config.getDataSourceFactory(), DB_ENV);
  86. jdbi.installPlugin(new SqlObjectPlugin());
  87. jdbi.installPlugin(new Gson2Plugin());
  88. jdbi.installPlugin(new GuavaPlugin());
  89. this.mongoInstance = initMongoDBInstance();
  90. this.consentDAO = this.jdbi.onDemand(ConsentDAO.class);
  91. this.electionDAO = this.jdbi.onDemand(ElectionDAO.class);
  92. this.helpReportDAO = this.jdbi.onDemand(HelpReportDAO.class);
  93. this.voteDAO = this.jdbi.onDemand(VoteDAO.class);
  94. this.datasetDAO = this.jdbi.onDemand(DataSetDAO.class);
  95. this.datasetAssociationDAO = this.jdbi.onDemand(DataSetAssociationDAO.class);
  96. this.dacDAO = this.jdbi.onDemand(DacDAO.class);
  97. this.dacUserDAO = this.jdbi.onDemand(DACUserDAO.class);
  98. this.userRoleDAO = this.jdbi.onDemand(UserRoleDAO.class);
  99. this.matchDAO = this.jdbi.onDemand(MatchDAO.class);
  100. this.mailMessageDAO = this.jdbi.onDemand(MailMessageDAO.class);
  101. this.approvalExpirationTimeDAO = this.jdbi.onDemand(ApprovalExpirationTimeDAO.class);
  102. this.datasetAuditDAO = this.jdbi.onDemand(DataSetAuditDAO.class);
  103. this.mailServiceDAO = this.jdbi.onDemand(MailServiceDAO.class);
  104. this.researcherPropertyDAO = this.jdbi.onDemand(ResearcherPropertyDAO.class);
  105. this.workspaceAuditDAO = this.jdbi.onDemand(WorkspaceAuditDAO.class);
  106. this.associationDAO = this.jdbi.onDemand(AssociationDAO.class);
  107. this.dataAccessRequestDAO = this.jdbi.onDemand(DataAccessRequestDAO.class);
  108. }
  109. @Override
  110. protected void configure() {
  111. bind(Configuration.class).toInstance(config);
  112. bind(Environment.class).toInstance(environment);
  113. }
  114. @Provides
  115. Client providesClient() {
  116. return client;
  117. }
  118. @Provides
  119. Jdbi providesJdbi() {
  120. return jdbi;
  121. }
  122. @Provides
  123. MongoConsentDB providesMongo() {
  124. return mongoInstance;
  125. }
  126. @Provides
  127. UseRestrictionConverter providesUseRestrictionConverter() {
  128. return new UseRestrictionConverter(providesClient(), config.getServicesConfiguration());
  129. }
  130. @Provides
  131. GCSStore providesGCSStore() {
  132. return new GCSStore(config.getCloudStoreConfiguration());
  133. }
  134. @Provides
  135. GCSService providesGCSService() {
  136. return new GCSService(config.getCloudStoreConfiguration());
  137. }
  138. @Provides
  139. ConsentService providesConsentService() {
  140. return new ConsentService(
  141. providesConsentDAO(),
  142. providesElectionDAO(),
  143. providesVoteDAO(),
  144. providesDacService(),
  145. providesDataAccessRequestDAO());
  146. }
  147. @Provides
  148. ConsentDAO providesConsentDAO() {
  149. return consentDAO;
  150. }
  151. @Provides
  152. DataAccessRequestService providesDataAccessRequestService() {
  153. return new DataAccessRequestService(
  154. providesConsentDAO(),
  155. providesDataAccessRequestDAO(),
  156. providesDacDAO(),
  157. providesDACUserDAO(),
  158. providesDataSetDAO(),
  159. providesElectionDAO(),
  160. providesDacService(),
  161. providesUserService(),
  162. providesVoteDAO());
  163. }
  164. @Provides
  165. ElectionService providesElectionService() {
  166. return new ElectionService(
  167. providesConsentDAO(),
  168. providesElectionDAO(),
  169. providesDacService(),
  170. providesDataAccessRequestService());
  171. }
  172. @Provides
  173. FreeMarkerTemplateHelper providesFreeMarkerTemplateHelper() {
  174. return new FreeMarkerTemplateHelper(config.getFreeMarkerConfiguration());
  175. }
  176. @Provides
  177. EmailNotifierService providesEmailNotifierService() {
  178. return new EmailNotifierService(
  179. providesConsentDAO(),
  180. providesDataAccessRequestService(),
  181. providesVoteDAO(),
  182. providesElectionDAO(),
  183. providesDACUserDAO(),
  184. providesMailMessageDAO(),
  185. providesMailService(),
  186. providesMailServiceDAO(),
  187. providesFreeMarkerTemplateHelper(),
  188. config.getServicesConfiguration().getLocalURL(),
  189. config.getMailConfiguration().isActivateEmailNotifications(),
  190. providesResearcherPropertyDAO()
  191. );
  192. }
  193. @Provides
  194. MailService providesMailService() {
  195. return new MailService(config.getMailConfiguration());
  196. }
  197. @Provides
  198. PendingCaseService providesPendingCaseService() {
  199. return new PendingCaseService(
  200. providesConsentDAO(),
  201. providesDataAccessRequestService(),
  202. providesDataSetDAO(),
  203. providesElectionDAO(),
  204. providesVoteDAO(),
  205. providesDacService(),
  206. providesUserService(),
  207. providesVoteService());
  208. }
  209. @Provides
  210. DataAccessRequestDAO providesDataAccessRequestDAO() {
  211. return dataAccessRequestDAO;
  212. }
  213. @Provides
  214. ElectionDAO providesElectionDAO() {
  215. return electionDAO;
  216. }
  217. @Provides
  218. HelpReportDAO providesHelpReportDAO() {
  219. return helpReportDAO;
  220. }
  221. @Provides
  222. VoteDAO providesVoteDAO() {
  223. return voteDAO;
  224. }
  225. @Provides
  226. VoteService providesVoteService() {
  227. return new VoteService(
  228. providesDACUserDAO(),
  229. providesDataSetAssociationDAO(),
  230. providesElectionDAO(),
  231. providesVoteDAO());
  232. }
  233. @Provides
  234. DataSetDAO providesDataSetDAO() {
  235. return datasetDAO;
  236. }
  237. @Provides
  238. DataSetAssociationDAO providesDataSetAssociationDAO() {
  239. return datasetAssociationDAO;
  240. }
  241. @Provides
  242. DacDAO providesDacDAO() {
  243. return dacDAO;
  244. }
  245. @Provides
  246. DacService providesDacService() {
  247. return new DacService(
  248. providesDacDAO(),
  249. providesDACUserDAO(),
  250. providesDataSetDAO(),
  251. providesElectionDAO(),
  252. providesDataAccessRequestDAO(),
  253. providesUserService(),
  254. providesVoteService());
  255. }
  256. @Provides
  257. DACUserDAO providesDACUserDAO() {
  258. return dacUserDAO;
  259. }
  260. @Provides
  261. UserRoleDAO providesUserRoleDAO() {
  262. return userRoleDAO;
  263. }
  264. @Provides
  265. MatchDAO providesMatchDAO() {
  266. return matchDAO;
  267. }
  268. @Provides
  269. MailMessageDAO providesMailMessageDAO() {
  270. return mailMessageDAO;
  271. }
  272. @Provides
  273. ApprovalExpirationTimeDAO providesApprovalExpirationTimeDAO() {
  274. return approvalExpirationTimeDAO;
  275. }
  276. @Provides
  277. DataSetAuditDAO providesDataSetAuditDAO() {
  278. return datasetAuditDAO;
  279. }
  280. @Provides
  281. MailServiceDAO providesMailServiceDAO() {
  282. return mailServiceDAO;
  283. }
  284. @Provides
  285. ResearcherPropertyDAO providesResearcherPropertyDAO() {
  286. return researcherPropertyDAO;
  287. }
  288. @Provides
  289. WorkspaceAuditDAO providesWorkspaceAuditDAO() {
  290. return workspaceAuditDAO;
  291. }
  292. @Provides
  293. AssociationDAO providesAssociationDAO() {
  294. return associationDAO;
  295. }
  296. @Provides
  297. UserService providesUserService() {
  298. return new UserService(
  299. providesDACUserDAO(),
  300. providesResearcherPropertyDAO(),
  301. providesUserRoleDAO(),
  302. providesVoteDAO());
  303. }
  304. @Provides
  305. WhitelistService providesWhitelistService() {
  306. return new WhitelistService(
  307. providesGCSService(),
  308. providesWhitelistCache());
  309. }
  310. @Provides
  311. WhitelistCache providesWhitelistCache() {
  312. return new WhitelistCache(providesGCSService());
  313. }
  314. // Private helpers
  315. private MongoConsentDB initMongoDBInstance() {
  316. MongoClient mongoClient = getMongoClient();
  317. String dbName = config.getMongoConfiguration().getDbName();
  318. MongoConsentDB instance = new MongoConsentDB(mongoClient, dbName);
  319. instance.configureMongo();
  320. return instance;
  321. }
  322. private MongoClient getMongoClient() {
  323. MongoConfiguration mongoConfiguration = config.getMongoConfiguration();
  324. if (mongoConfiguration.isTestMode()) {
  325. Fongo fongo = new Fongo("TestServer");
  326. return fongo.getMongo();
  327. } else {
  328. return mongoConfiguration.getMongoClient();
  329. }
  330. }
  331. }