001/* 002 * geordi 003 * 004 * Copyright (C) 2018 Richard "Shred" Körber 005 * https://github.com/shred/geordi 006 * 007 * This program is free software: you can redistribute it and/or modify 008 * it under the terms of the GNU General Public License as 009 * published by the Free Software Foundation, either version 3 of the 010 * License, or (at your option) any later version. 011 * 012 * This program is distributed in the hope that it will be useful, 013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 015 */ 016package org.shredzone.geordi; 017 018import com.google.inject.AbstractModule; 019import com.google.inject.multibindings.MapBinder; 020import org.jdbi.v3.core.Jdbi; 021import org.jdbi.v3.postgres.PostgresPlugin; 022import org.quartz.Scheduler; 023import org.quartz.SchedulerException; 024import org.quartz.impl.StdSchedulerFactory; 025import org.shredzone.geordi.device.AquaeroDevice; 026import org.shredzone.geordi.device.AvmDevice; 027import org.shredzone.geordi.device.Ccu2Device; 028import org.shredzone.geordi.device.Device; 029import org.shredzone.geordi.device.DustyDevice; 030import org.shredzone.geordi.device.KaminariDevice; 031import org.shredzone.geordi.service.CompactingService; 032import org.shredzone.geordi.service.CompactingServiceImpl; 033import org.shredzone.geordi.service.DatabaseService; 034import org.shredzone.geordi.service.DatabaseServiceImpl; 035 036/** 037 * Guice module definitions for Geordi. 038 */ 039public class GeordiModule extends AbstractModule { 040 041 private String databaseHost; 042 private String databaseUser; 043 private String databasePassword; 044 045 public void setDatabaseHost(String databaseHost) { 046 this.databaseHost = databaseHost; 047 } 048 049 public void setDatabaseUser(String databaseUser) { 050 this.databaseUser = databaseUser; 051 } 052 053 public void setDatabasePassword(String databasePassword) { 054 this.databasePassword = databasePassword; 055 } 056 057 @Override 058 protected void configure() { 059 bind(DatabaseService.class).to(DatabaseServiceImpl.class); 060 bind(CompactingService.class).to(CompactingServiceImpl.class); 061 062 MapBinder<String, Device> mapbinder = MapBinder.newMapBinder(binder(), String.class, Device.class); 063 mapbinder.addBinding("aquaero").to(AquaeroDevice.class); 064 mapbinder.addBinding("avm").to(AvmDevice.class); 065 mapbinder.addBinding("ccu2").to(Ccu2Device.class); 066 mapbinder.addBinding("dusty").to(DustyDevice.class); 067 mapbinder.addBinding("kaminari").to(KaminariDevice.class); 068 // Add more device implementations here... 069 070 try { 071 bind(Scheduler.class).toInstance(StdSchedulerFactory.getDefaultScheduler()); 072 } catch (SchedulerException ex) { 073 throw new IllegalStateException(ex); 074 } 075 076 Jdbi jdbi; 077 if (databaseUser != null && databasePassword != null) { 078 jdbi = Jdbi.create(databaseHost, databaseUser, databasePassword); 079 } else { 080 jdbi = Jdbi.create(databaseHost); 081 } 082 083 jdbi.installPlugin(new PostgresPlugin()); 084 bind(Jdbi.class).toInstance(jdbi); 085 } 086 087}