///////////////////////////////////////////////////////////////////////////// // // Project ProjectForge Community Edition // www.projectforge.org // // Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de) // // ProjectForge is dual-licensed. // // This community edition 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; version 3 of the License. // // This community edition 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/. // ///////////////////////////////////////////////////////////////////////////// package org.projectforge.registry; import javax.sql.DataSource; import org.projectforge.access.AccessDao; import org.projectforge.address.AddressDao; import org.projectforge.book.BookDao; import org.projectforge.core.BaseDao; import org.projectforge.core.ConfigurationDao; import org.projectforge.fibu.AuftragDao; import org.projectforge.fibu.AuftragsPositionDO; import org.projectforge.fibu.EingangsrechnungDao; import org.projectforge.fibu.EingangsrechnungsPositionDO; import org.projectforge.fibu.EmployeeDao; import org.projectforge.fibu.EmployeeSalaryDao; import org.projectforge.fibu.EmployeeScriptingDao; import org.projectforge.fibu.KontoDao; import org.projectforge.fibu.KundeDao; import org.projectforge.fibu.PaymentScheduleDO; import org.projectforge.fibu.ProjektDao; import org.projectforge.fibu.RechnungDao; import org.projectforge.fibu.RechnungsPositionDO; import org.projectforge.fibu.kost.BuchungssatzDao; import org.projectforge.fibu.kost.Kost1Dao; import org.projectforge.fibu.kost.Kost1ScriptingDao; import org.projectforge.fibu.kost.Kost2ArtDao; import org.projectforge.fibu.kost.Kost2Dao; import org.projectforge.fibu.kost.KostZuweisungDao; import org.projectforge.gantt.GanttChartDao; import org.projectforge.humanresources.HRPlanningDao; import org.projectforge.humanresources.HRPlanningEntryDO; import org.projectforge.meb.MebDao; import org.projectforge.orga.ContractDao; import org.projectforge.orga.PostausgangDao; import org.projectforge.orga.PosteingangDao; import org.projectforge.scripting.ScriptDao; import org.projectforge.task.TaskDao; import org.projectforge.timesheet.TimesheetDao; import org.projectforge.timesheet.TimesheetFilter; import org.projectforge.user.GroupDao; import org.projectforge.user.UserDao; import org.projectforge.user.UserPrefDao; import org.projectforge.user.UserRightDao; import org.projectforge.user.UserXmlPreferencesDao; import org.springframework.orm.hibernate3.HibernateTemplate; /** * Helper object which stores all dao objects and put them into the registry. <br/> * <b>Please note:</b><br/> * All dao's are added automatically to the scripting engine! If you don't want so, please edit ScriptDao. * * @author Kai Reinhard (k.reinhard@micromata.de) * */ public class DaoRegistry { private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(DaoRegistry.class); private static DaoRegistry instance; // ******************************************************************************* // *** Please note: All dao's are added automatically to the scripting engine! *** // *** If you don't want so, please edit ScriptDao. *** // ******************************************************************************* public static final String ACCESS = "access"; public static final String ACCOUNT = "account"; public static final String ACCOUNTING_RECORD = "accountingRecord"; public static final String ADDRESS = "address"; public static final String ADDRESSKAT = "addressKat"; public static final String BOOK = "book"; public static final String CONFIGURATION = "configuration"; public static final String CONTRACT = "contract"; public static final String COST_ASSIGNMENT = "costAssignment"; public static final String COST1 = "cost1"; public static final String COST2 = "cost2"; public static final String COST2_Type = "cost2Type"; public static final String CUSTOMER = "customer"; public static final String EMPLOYEE = "employee"; public static final String EMPLOYEE_SALARY = "employeeSalary"; public static final String GANTT = "gantt"; public static final String GROUP = "group"; public static final String HR_LIST = "hrList"; public static final String HR_PLANNING = "hrPlanning"; public static final String INCOMING_INVOICE = "incomingInvoice"; public static final String INCOMING_MAIL = "incomingMail"; public static final String MEB = "meb"; public static final String ORDERBOOK = "orderBook"; public static final String OUTGOING_INVOICE = "outgoingInvoice"; public static final String OUTGOING_MAIL = "outgoingMail"; public static final String PAYMENTSCHEDULE = "paymentSchedule"; public static final String PROJECT = "project"; public static final String SCRIPT = "script"; public static final String TASK = "task"; public static final String TIMESHEET = "timesheet"; public static final String USER = "user"; public static final String USER_RIGHT = "userRight"; public static final String USER_PREF = "userPref"; private AccessDao accessDao; private AddressDao addressDao; private AuftragDao auftragDao; private BuchungssatzDao buchungssatzDao; private BookDao bookDao; private ConfigurationDao configurationDao; private ContractDao contractDao; private DataSource dataSource; private EingangsrechnungDao eingangsrechnungDao; private EmployeeDao employeeDao; private EmployeeSalaryDao employeeSalaryDao; private GanttChartDao ganttChartDao; private GroupDao groupDao; private HibernateTemplate hibernateTemplate; private HRPlanningDao hrPlanningDao; private KontoDao kontoDao; private Kost1Dao kost1Dao; private Kost2ArtDao kost2ArtDao; private Kost2Dao kost2Dao; private KostZuweisungDao kostZuweisungDao; private KundeDao kundeDao; private MebDao mebDao; private PostausgangDao postausgangDao; private PosteingangDao posteingangDao; private RechnungDao rechnungDao; private ProjektDao projektDao; private ScriptDao scriptDao; private TaskDao taskDao; private TimesheetDao timesheetDao; private UserDao userDao; private UserPrefDao userPrefDao; private UserRightDao userRightDao; private UserXmlPreferencesDao userXmlPreferencesDao; /** * Registers all daos. */ @SuppressWarnings("unchecked") public synchronized void init() { if (instance != null) { log.info("DaoRegistry is already initialized!"); return; } register(CONFIGURATION, ConfigurationDao.class, configurationDao, "administration.configuration").setSearchable(false); register(USER, UserDao.class, userDao, "user"); Registry.instance().setUserGroupCache(userDao.getUserGroupCache()); register(GROUP, GroupDao.class, groupDao, "group"); register(TASK, TaskDao.class, taskDao, "task"); // needs PFUserDO Registry.instance().setTaskTree(taskDao.getTaskTree()); register(ACCESS, AccessDao.class, accessDao, "access"); register(ADDRESS, AddressDao.class, addressDao, "address"); register(TIMESHEET, TimesheetDao.class, timesheetDao, "timesheet") // .setSearchFilterClass(TimesheetFilter.class); register(BOOK, BookDao.class, bookDao, "book"); register(CUSTOMER, KundeDao.class, kundeDao, "fibu.kunde"); register(PROJECT, ProjektDao.class, projektDao, "fibu.projekt"); // Needs customer register(COST1, Kost1Dao.class, kost1Dao, "fibu.kost1").setScriptingDao(new Kost1ScriptingDao(kost1Dao)); register(COST2_Type, Kost2ArtDao.class, kost2ArtDao, "fibu.kost2art"); register(COST2, Kost2Dao.class, kost2Dao, "fibu.kost2"); // Needs kost2Art and project register(COST_ASSIGNMENT, KostZuweisungDao.class, kostZuweisungDao, "fibu.") // Needs kost, invoices, employee salaries .setFullTextSearchSupport(false).setSearchable(false); register(ORDERBOOK, AuftragDao.class, auftragDao, "fibu.auftrag") // Needs customer, project .setNestedDOClasses(AuftragsPositionDO.class, PaymentScheduleDO.class); register(OUTGOING_INVOICE, RechnungDao.class, rechnungDao, "fibu.rechnung") // Needs customer, project .setNestedDOClasses(RechnungsPositionDO.class); Registry.instance().setInvoiceCache(rechnungDao.getRechnungCache()); register(INCOMING_INVOICE, EingangsrechnungDao.class, eingangsrechnungDao, "fibu.eingangsrechnung") // .setNestedDOClasses(EingangsrechnungsPositionDO.class); register(ACCOUNTING_RECORD, BuchungssatzDao.class, buchungssatzDao, "fibu.buchungssatz").setSearchable(false); // Need account, cost1 // and cost2. register(ACCOUNT, KontoDao.class, kontoDao, "fibu.konto"); Registry.instance().setKontoCache(kontoDao.getKontoCache()); register(EMPLOYEE, EmployeeDao.class, employeeDao, "fibu.employee").setScriptingDao(new EmployeeScriptingDao(employeeDao)); register(EMPLOYEE_SALARY, EmployeeDao.class, employeeSalaryDao, "fibu.employee.salary").setSearchable(false); register(CONTRACT, ContractDao.class, contractDao, "legalAffaires.contract"); register(OUTGOING_MAIL, PostausgangDao.class, postausgangDao, "orga.postausgang"); register(INCOMING_MAIL, PosteingangDao.class, posteingangDao, "orga.posteingang"); register(GANTT, GanttChartDao.class, ganttChartDao, "gantt"); register(HR_PLANNING, HRPlanningDao.class, hrPlanningDao, "hr.planning") // .setNestedDOClasses(HRPlanningEntryDO.class).setSearchable(false); register(MEB, MebDao.class, mebDao, "meb"); register(SCRIPT, ScriptDao.class, scriptDao, "scripting").setSearchable(false); register(USER_PREF, UserPrefDao.class, userPrefDao).setSearchable(false); register(USER_RIGHT, UserRightDao.class, userRightDao).setSearchable(false); Registry.instance().setDataSource(dataSource); Registry.instance().setHibernateTemplate(hibernateTemplate); Registry.instance().setUserXmlPreferencesDao(userXmlPreferencesDao); instance = this; } public DaoRegistry() { } private RegistryEntry register(final String id, final Class< ? extends BaseDao< ? >> daoClassType, final BaseDao< ? > dao) { return register(id, daoClassType, dao, null); } /** * Registers a new dao, which is available * @param id * @param daoClassType * @param dao * @param i18nPrefix * @return */ public RegistryEntry register(final String id, final Class< ? extends BaseDao< ? >> daoClassType, final BaseDao< ? > dao, final String i18nPrefix) { if (dao == null) { log.error("Dao for '" + id + "' is null! Ignoring dao in registry."); return new RegistryEntry(null, null, null); // Create dummy. } final Registry registry = Registry.instance(); final RegistryEntry entry = new RegistryEntry(id, daoClassType, dao, i18nPrefix); registry.register(entry); log.info("Dao '" + id + "' registerd."); return entry; } public void setAccessDao(final AccessDao accessDao) { this.accessDao = accessDao; } public void setAddressDao(final AddressDao addressDao) { this.addressDao = addressDao; } public void setAuftragDao(final AuftragDao auftragDao) { this.auftragDao = auftragDao; } public void setBuchungssatzDao(final BuchungssatzDao buchungssatzDao) { this.buchungssatzDao = buchungssatzDao; } public void setBookDao(final BookDao bookDao) { this.bookDao = bookDao; } public void setConfigurationDao(final ConfigurationDao configurationDao) { this.configurationDao = configurationDao; } public void setContractDao(final ContractDao contractDao) { this.contractDao = contractDao; } public void setDataSource(final DataSource dataSource) { this.dataSource = dataSource; } public void setEmployeeDao(final EmployeeDao employeeDao) { this.employeeDao = employeeDao; } public void setEmployeeSalaryDao(final EmployeeSalaryDao employeeSalaryDao) { this.employeeSalaryDao = employeeSalaryDao; } public void setEingangsrechnungDao(final EingangsrechnungDao eingangsrechnungDao) { this.eingangsrechnungDao = eingangsrechnungDao; } public void setGanttChartDao(final GanttChartDao ganttChartDao) { this.ganttChartDao = ganttChartDao; } public void setGroupDao(final GroupDao groupDao) { this.groupDao = groupDao; } public void setHibernateTemplate(final HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } public void setHRPlanningDao(final HRPlanningDao hrPlanningDao) { this.hrPlanningDao = hrPlanningDao; } public void setKontoDao(final KontoDao kontoDao) { this.kontoDao = kontoDao; } public void setKost1Dao(final Kost1Dao kost1Dao) { this.kost1Dao = kost1Dao; } public void setKost2ArtDao(final Kost2ArtDao kost2ArtDao) { this.kost2ArtDao = kost2ArtDao; } public void setKost2Dao(final Kost2Dao kost2Dao) { this.kost2Dao = kost2Dao; } public void setKostZuweisungDao(final KostZuweisungDao kostZuweisungDao) { this.kostZuweisungDao = kostZuweisungDao; } public void setKundeDao(final KundeDao kundeDao) { this.kundeDao = kundeDao; } public void setMebDao(final MebDao mebDao) { this.mebDao = mebDao; } public void setPostausgangDao(final PostausgangDao postausgangDao) { this.postausgangDao = postausgangDao; } public void setPosteingangDao(final PosteingangDao posteingangDao) { this.posteingangDao = posteingangDao; } public void setRechnungDao(final RechnungDao rechnungDao) { this.rechnungDao = rechnungDao; } public void setProjektDao(final ProjektDao projektDao) { this.projektDao = projektDao; } public void setScriptDao(final ScriptDao scriptDao) { this.scriptDao = scriptDao; } public void setTaskDao(final TaskDao taskDao) { this.taskDao = taskDao; } public void setTimesheetDao(final TimesheetDao timesheetDao) { this.timesheetDao = timesheetDao; } public void setUserDao(final UserDao userDao) { this.userDao = userDao; } public void setUserPrefDao(final UserPrefDao userPrefDao) { this.userPrefDao = userPrefDao; } public void setUserRightDao(final UserRightDao userRightDao) { this.userRightDao = userRightDao; } public void setUserXmlPreferencesDao(final UserXmlPreferencesDao userXmlPreferencesDao) { this.userXmlPreferencesDao = userXmlPreferencesDao; } }