package org.sigmah.server.inject;
/*
* #%L
* Sigmah
* %%
* Copyright (C) 2010 - 2016 URD
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import org.sigmah.server.dao.*;
import org.sigmah.server.dao.impl.*;
import org.sigmah.server.dao.util.SQLDialect;
import org.sigmah.server.dao.util.SQLDialectProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.inject.AbstractModule;
import com.google.inject.Singleton;
import com.google.inject.persist.jpa.JpaPersistModule;
import org.sigmah.server.dao.PivotDAO;
import org.sigmah.server.dao.ProjectFundingDAO;
import org.sigmah.server.dao.impl.PivotHibernateDAO;
import org.sigmah.server.dao.impl.ProjectFundingHibernateDAO;
/**
* Abstract module providing methods to install the DAO-layer interfaces.
*
* @author Denis Colliot (dcolliot@ideia.fr)
*/
public class PersistenceModule extends AbstractModule {
/**
* Log.
*/
private static final Logger LOG = LoggerFactory.getLogger(PersistenceModule.class);
/**
* {@inheritDoc}
*/
@Override
protected final void configure() {
if (LOG.isInfoEnabled()) {
LOG.info("Installing persistence module.");
}
// Binds providers.
bind(SQLDialect.class).toProvider(SQLDialectProvider.class).in(Singleton.class);
// Installs the JPA module.
install(new JpaPersistModule("sigmah-dev"));
// JSR-303 : bean validation.
final ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
final Validator validator = factory.getValidator();
bind(Validator.class).toInstance(validator);
// DAOs (Thank you for maintaining alphabetical order).
bind(ActivityDAO.class).to(ActivityHibernateDAO.class).in(Singleton.class);
bind(AdminDAO.class).to(AdminHibernateDAO.class).in(Singleton.class);
bind(AmendmentDAO.class).to(AmendmentHibernateDAO.class).in(Singleton.class);
bind(AuthenticationDAO.class).to(AuthenticationHibernateDAO.class).in(Singleton.class);
bind(ContactDAO.class).to(ContactHibernateDAO.class);
bind(ContactModelDAO.class).to(ContactModelHibernateDAO.class).in(Singleton.class);
bind(CountryDAO.class).to(CountryHibernateDAO.class).in(Singleton.class);
bind(FileDAO.class).to(FileHibernateDAO.class).in(Singleton.class);
bind(FlexibleElementDAO.class).to(FlexibleElementHibernateDAO.class).in(Singleton.class);
bind(FrameworkDAO.class).to(FrameworkHibernateDAO.class).in(Singleton.class);
bind(FrameworkFulfillmentDAO.class).to(FrameworkFulfillmentHibernateDAO.class).in(Singleton.class);
bind(GlobalContactExportSettingsDAO.class).to(GlobalContactExportSettingsHibernateDAO.class).in(Singleton.class);
bind(GlobalExportDAO.class).to(GlobalExportHibernateDAO.class).in(Singleton.class);
bind(GlobalExportSettingsDAO.class).to(GlobalExportSettingsHibernateDAO.class).in(Singleton.class);
bind(HistoryTokenDAO.class).to(HistoryTokenHibernateDAO.class).in(Singleton.class);
bind(IndicatorDAO.class).to(IndicatorHibernateDAO.class).in(Singleton.class);
bind(LayoutGroupDAO.class).to(LayoutGroupHibernateDAO.class).in(Singleton.class);
bind(LayoutGroupIterationDAO.class).to(LayoutGroupIterationHibernateDAO.class).in(Singleton.class);
bind(LocationDAO.class).to(LocationHibernateDAO.class).in(Singleton.class);
bind(LocationTypeDAO.class).to(LocationTypeHibernateDAO.class).in(Singleton.class);
bind(MonitoredPointDAO.class).to(MonitoredPointHibernateDAO.class).in(Singleton.class);
bind(MonitoredPointListDAO.class).to(MonitoredPointListHibernateDAO.class).in(Singleton.class);
bind(OrganizationDAO.class).to(OrganizationHibernateDAO.class).in(Singleton.class);
bind(OrgUnitDAO.class).to(OrgUnitHibernateDAO.class).in(Singleton.class);
bind(OrgUnitBannerDAO.class).to(OrgUnitBannerHibernateDAO.class).in(Singleton.class);
bind(OrgUnitDetailsDAO.class).to(OrgUnitDetailsHibernateDAO.class).in(Singleton.class);
bind(OrgUnitModelDAO.class).to(OrgUnitModelHibernateDAO.class).in(Singleton.class);
bind(PartnerDAO.class).to(PartnerHibernateDAO.class).in(Singleton.class);
bind(PersonalEventDAO.class).to(PersonalEventHibernateDAO.class).in(Singleton.class);
bind(PhaseModelDAO.class).to(PhaseModelHibernateDAO.class).in(Singleton.class);
bind(PivotDAO.class).to(PivotHibernateDAO.class).in(Singleton.class);
bind(PrivacyGroupDAO.class).to(PrivacyGroupHibernateDAO.class).in(Singleton.class);
bind(ProfileDAO.class).to(ProfileHibernateDAO.class).in(Singleton.class);
bind(ProjectDAO.class).to(ProjectHibernateDAO.class).in(Singleton.class);
bind(ProjectFundingDAO.class).to(ProjectFundingHibernateDAO.class).in(Singleton.class);
bind(ProjectBannerDAO.class).to(ProjectBannerHibernateDAO.class).in(Singleton.class);
bind(ProjectDetailsDAO.class).to(ProjectDetailsHibernateDAO.class).in(Singleton.class);
bind(ProjectModelDAO.class).to(ProjectModelHibernateDAO.class).in(Singleton.class);
bind(ProjectReportDAO.class).to(ProjectReportHibernateDAO.class).in(Singleton.class);
bind(QuestionChoiceElementDAO.class).to(QuestionChoiceElementHibernateDAO.class).in(Singleton.class);
bind(ReminderDAO.class).to(ReminderHibernateDAO.class).in(Singleton.class);
bind(ReminderListDAO.class).to(ReminderListHibernateDAO.class).in(Singleton.class);
bind(ReportDefinitionDAO.class).to(ReportDefinitionHibernateDAO.class).in(Singleton.class);
bind(ReportingPeriodDAO.class).to(ReportingPeriodHibernateDAO.class).in(Singleton.class);
bind(SiteDAO.class).to(SiteHibernateDAO.class).in(Singleton.class);
bind(SiteTableDAO.class).to(SiteTableHibernateDAO.class).in(Singleton.class);
bind(TripletValueDAO.class).to(TripletValueHibernateDAO.class).in(Singleton.class);
bind(UserDAO.class).to(UserHibernateDAO.class).in(Singleton.class);
bind(UserDatabaseDAO.class).to(UserDatabaseHibernateDAO.class).in(Singleton.class);
bind(UserUnitDAO.class).to(UserUnitDAOImpl.class).in(Singleton.class);
bind(ValueDAO.class).to(ValueHibernateDAO.class).in(Singleton.class);
// TODO [DAO] A intégrer (si nécessaire).
// BaseMapDAO.java + BaseMapFsDAO.java
// PivotDAO.java + PivotHibernateDAO.java
}
}