DAOFactory.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */
  20. package org.openspcoop2.core.commons.dao;

  21. import org.openspcoop2.core.commons.IDAOFactory;
  22. import org.openspcoop2.generic_project.beans.IProjectInfo;
  23. import org.openspcoop2.generic_project.utils.ServiceManagerProperties;
  24. import org.slf4j.Logger;

  25. import java.lang.reflect.Constructor;
  26. import java.sql.Connection;
  27. import java.util.Properties;

  28. import javax.sql.DataSource;

  29. /**
  30.  * DAOFactory
  31.  *
  32.  * @author Poli Andrea (apoli@link.it)
  33.  * @author $Author$
  34.  * @version $Rev$, $Date$
  35.  */
  36. public class DAOFactory implements IDAOFactory {

  37.     /** Copia Statica */
  38.     private static DAOFactory daoFactory = null;

  39.     private static synchronized void initialize(Logger log) throws DAOFactoryException{

  40.         if(DAOFactory.daoFactory==null)
  41.             DAOFactory.daoFactory = new DAOFactory(log);    

  42.     }

  43.     public static DAOFactory getInstance(Logger log) throws DAOFactoryException{

  44.         if(DAOFactory.daoFactory==null) {
  45.             // spotbugs warning 'SING_SINGLETON_GETTER_NOT_SYNCHRONIZED'
  46.             synchronized (DAOFactory.class) {
  47.                 DAOFactory.initialize(log);
  48.             }
  49.         }

  50.         return DAOFactory.daoFactory;
  51.     }


  52.     private Logger log = null;
  53.     public Logger getLog() {
  54.         return this.log;
  55.     }

  56.     private DAOFactoryProperties daoFactoryProperties = null;

  57.     private DAOFactory(Logger log) throws DAOFactoryException{
  58.         try{
  59.             this.log = log;
  60.             this.daoFactoryProperties = DAOFactoryProperties.getInstance(log);
  61.         }catch(Exception e){
  62.             throw new DAOFactoryException(e.getMessage(),e);
  63.         }
  64.     }
  65.     protected DAOFactory(Logger log, DAOFactoryProperties daoFactoryProperties) throws DAOFactoryException{
  66.         try{
  67.             this.log = log;
  68.             this.daoFactoryProperties = daoFactoryProperties;
  69.         }catch(Exception e){
  70.             throw new DAOFactoryException(e.getMessage(),e);
  71.         }
  72.     }

  73.     private Object getServiceManager(IProjectInfo tipoDAO,DataSource ds,Connection connection,Boolean isAutocommit,
  74.             ServiceManagerProperties smProperties, Logger log) throws DAOFactoryException{

  75.         String daoClassName = null;
  76.         String mode = "";
  77.         org.openspcoop2.core.diagnostica.utils.ProjectInfo daoDiagnostica = org.openspcoop2.core.diagnostica.utils.ProjectInfo.getInstance();
  78.         boolean isDiagnostica = daoDiagnostica.getProjectName().equals(tipoDAO.getProjectName());
  79.         org.openspcoop2.core.tracciamento.utils.ProjectInfo daoTracciamento = org.openspcoop2.core.tracciamento.utils.ProjectInfo.getInstance();
  80.         boolean isTracciamento = daoTracciamento.getProjectName().equals(tipoDAO.getProjectName());
  81.         boolean isUtenti = "utenti".equals(tipoDAO.getProjectName());
  82.         try{

  83.             daoClassName = this.daoFactoryProperties.getDAOClassName(tipoDAO);
  84.             Class<?> cServiceManager = Class.forName(daoClassName);

  85.             if(!isTracciamento && !isDiagnostica && !isUtenti){
  86.            
  87.                 Constructor<?> constrServiceManager = null;
  88.                 Object object = null;
  89.                 if(smProperties==null){
  90.                     smProperties =this.daoFactoryProperties.getServiceManagerProperties(tipoDAO);
  91.                 }
  92.                 if(isAutocommit!=null){
  93.                     smProperties.setAutomaticTransactionManagement(isAutocommit);
  94.                 }
  95.    
  96.                 if(log==null){
  97.                     log = this.log;
  98.                 }
  99.    
  100.                 if(ds!=null){
  101.                     mode = "DSMode";
  102.                     constrServiceManager = cServiceManager
  103.                             .getConstructor(DataSource.class,
  104.                                     ServiceManagerProperties.class, Logger.class);
  105.                     object = constrServiceManager
  106.                             .newInstance(ds,
  107.                                     smProperties,log);
  108.                 }  
  109.                 else if(connection!=null){
  110.                     mode = "ConnectionMode";
  111.                     constrServiceManager = cServiceManager
  112.                             .getConstructor(Connection.class,
  113.                                     ServiceManagerProperties.class, Logger.class);
  114.                     object = constrServiceManager
  115.                             .newInstance(connection,
  116.                                     smProperties,log);
  117.                 }
  118.                 else{  
  119.                     if(this.daoFactoryProperties.isTipoAccessoTramiteDatasource(tipoDAO)){
  120.                         mode = "LookupDSMode";
  121.                         constrServiceManager = cServiceManager
  122.                                 .getConstructor(String.class,
  123.                                         Properties.class,
  124.                                         ServiceManagerProperties.class, Logger.class);
  125.                         object = constrServiceManager
  126.                                 .newInstance(this.daoFactoryProperties.getDatasourceJNDIName(tipoDAO),
  127.                                         this.daoFactoryProperties.getDatasourceJNDIContext(tipoDAO),
  128.                                         smProperties,log);
  129.                     }
  130.                     else{
  131.                         mode = "LookupConnectionMode";
  132.                         constrServiceManager = cServiceManager
  133.                                 .getConstructor(String.class,
  134.                                         String.class,
  135.                                         String.class,
  136.                                         String.class,
  137.                                         ServiceManagerProperties.class, Logger.class);
  138.                         object = constrServiceManager
  139.                                 .newInstance(this.daoFactoryProperties.getConnectionUrl(tipoDAO),
  140.                                         this.daoFactoryProperties.getConnectionDriverJDBC(tipoDAO),
  141.                                         this.daoFactoryProperties.getConnectionAuthUsername(tipoDAO),
  142.                                         this.daoFactoryProperties.getConnectionAuthPassword(tipoDAO),
  143.                                         smProperties,log);
  144.                     }      
  145.                 }
  146.    
  147.                 return object;
  148.                
  149.             }
  150.             else{
  151.            
  152.                
  153.                 Constructor<?> constrServiceManager = null;
  154.                 Object object = null;
  155.                 if(smProperties==null){
  156.                     smProperties =this.daoFactoryProperties.getServiceManagerProperties(tipoDAO);
  157.                 }
  158.                 if(isAutocommit!=null){
  159.                     smProperties.setAutomaticTransactionManagement(isAutocommit);
  160.                 }
  161.    
  162.                 if(log==null){
  163.                     log = this.log;
  164.                 }
  165.    
  166.                 if(ds!=null){
  167.                     mode = "DSMode";
  168.                     constrServiceManager = cServiceManager
  169.                             .getConstructor(DataSource.class,
  170.                                     String.class, Logger.class);
  171.                     object = constrServiceManager
  172.                             .newInstance(ds,
  173.                                     smProperties.getDatabaseType(),log);
  174.                 }  
  175.                 else if(connection!=null){
  176.                     mode = "ConnectionMode";
  177.                     constrServiceManager = cServiceManager
  178.                             .getConstructor(Connection.class,
  179.                                     String.class, Logger.class);
  180.                     object = constrServiceManager
  181.                             .newInstance(connection,
  182.                                     smProperties.getDatabaseType(),log);
  183.                 }
  184.                 else{  
  185.                     if(this.daoFactoryProperties.isTipoAccessoTramiteDatasource(tipoDAO)){
  186.                         mode = "LookupDSMode";
  187.                         constrServiceManager = cServiceManager
  188.                                 .getConstructor(String.class,
  189.                                         String.class,
  190.                                         Properties.class,
  191.                                         Logger.class);
  192.                         object = constrServiceManager
  193.                                 .newInstance(this.daoFactoryProperties.getDatasourceJNDIName(tipoDAO),
  194.                                         smProperties.getDatabaseType(),
  195.                                         this.daoFactoryProperties.getDatasourceJNDIContext(tipoDAO),
  196.                                         log);
  197.                     }
  198.                     else{
  199.                         mode = "LookupConnectionMode";
  200.                         constrServiceManager = cServiceManager
  201.                                 .getConstructor(String.class,
  202.                                         String.class,
  203.                                         String.class,
  204.                                         String.class,
  205.                                         String.class, Logger.class);
  206.                         object = constrServiceManager
  207.                                 .newInstance(this.daoFactoryProperties.getConnectionUrl(tipoDAO),
  208.                                         this.daoFactoryProperties.getConnectionDriverJDBC(tipoDAO),
  209.                                         this.daoFactoryProperties.getConnectionAuthUsername(tipoDAO),
  210.                                         this.daoFactoryProperties.getConnectionAuthPassword(tipoDAO),
  211.                                         smProperties.getDatabaseType(),log);
  212.                     }      
  213.                 }
  214.    
  215.                 return object;
  216.                
  217.             }

  218.         }catch(Exception e){
  219.             throw new DAOFactoryException("[class:"+daoClassName+"][mode:"+mode+"]:"+e.getMessage(),e);
  220.         }
  221.     }






  222.     @Override
  223.     public Object getServiceManager(IProjectInfo dao) throws DAOFactoryException{
  224.         return this.getServiceManager(dao, null, null, null, null, null);
  225.     }
  226.     @Override
  227.     public Object getServiceManager(IProjectInfo dao, boolean autoCommit) throws DAOFactoryException{
  228.         return this.getServiceManager(dao, null, null, autoCommit, null, null);
  229.     }
  230.     @Override
  231.     public Object getServiceManager(IProjectInfo dao, DataSource ds) throws DAOFactoryException{
  232.         return this.getServiceManager(dao, ds, null, null, null, null);
  233.     }
  234.     @Override
  235.     public Object getServiceManager(IProjectInfo dao, DataSource ds,boolean autoCommit) throws DAOFactoryException{
  236.         return this.getServiceManager(dao, ds, null, autoCommit, null, null);
  237.     }
  238.     @Override
  239.     public Object getServiceManager(IProjectInfo dao, Connection connection) throws DAOFactoryException{
  240.         return this.getServiceManager(dao, null, connection, null, null, null);
  241.     }
  242.     @Override
  243.     public Object getServiceManager(IProjectInfo dao, Connection connection,boolean autoCommit) throws DAOFactoryException{
  244.         return this.getServiceManager(dao, null, connection, autoCommit, null, null);
  245.     }

  246.     @Override
  247.     public Object getServiceManager(IProjectInfo dao, ServiceManagerProperties smProperties) throws DAOFactoryException{
  248.         return this.getServiceManager(dao, null, null, null, smProperties, null);
  249.     }
  250.     @Override
  251.     public Object getServiceManager(IProjectInfo dao, boolean autoCommit, ServiceManagerProperties smProperties) throws DAOFactoryException{
  252.         return this.getServiceManager(dao, null, null, autoCommit, smProperties, null);
  253.     }
  254.     @Override
  255.     public Object getServiceManager(IProjectInfo dao, DataSource ds, ServiceManagerProperties smProperties) throws DAOFactoryException{
  256.         return this.getServiceManager(dao, ds, null, null, smProperties, null);
  257.     }
  258.     @Override
  259.     public Object getServiceManager(IProjectInfo dao, DataSource ds,boolean autoCommit, ServiceManagerProperties smProperties) throws DAOFactoryException{
  260.         return this.getServiceManager(dao, ds, null, autoCommit, smProperties, null);
  261.     }
  262.     @Override
  263.     public Object getServiceManager(IProjectInfo dao, Connection connection, ServiceManagerProperties smProperties) throws DAOFactoryException{
  264.         return this.getServiceManager(dao, null, connection, null, smProperties, null);
  265.     }
  266.     @Override
  267.     public Object getServiceManager(IProjectInfo dao, Connection connection,boolean autoCommit, ServiceManagerProperties smProperties) throws DAOFactoryException{
  268.         return this.getServiceManager(dao, null, connection, autoCommit, smProperties, null);
  269.     }

  270.     @Override
  271.     public Object getServiceManager(IProjectInfo dao, Logger log) throws DAOFactoryException{
  272.         return this.getServiceManager(dao, null, null, null, null, log);
  273.     }
  274.     @Override
  275.     public Object getServiceManager(IProjectInfo dao, boolean autoCommit, Logger log) throws DAOFactoryException{
  276.         return this.getServiceManager(dao, null, null, autoCommit, null, log);
  277.     }
  278.     @Override
  279.     public Object getServiceManager(IProjectInfo dao, DataSource ds, Logger log) throws DAOFactoryException{
  280.         return this.getServiceManager(dao, ds, null, null, null, log);
  281.     }
  282.     @Override
  283.     public Object getServiceManager(IProjectInfo dao, DataSource ds,boolean autoCommit, Logger log) throws DAOFactoryException{
  284.         return this.getServiceManager(dao, ds, null, autoCommit, null, log);
  285.     }
  286.     @Override
  287.     public Object getServiceManager(IProjectInfo dao, Connection connection, Logger log) throws DAOFactoryException{
  288.         return this.getServiceManager(dao, null, connection, null, null, log);
  289.     }
  290.     @Override
  291.     public Object getServiceManager(IProjectInfo dao, Connection connection,boolean autoCommit, Logger log) throws DAOFactoryException{
  292.         return this.getServiceManager(dao, null, connection, autoCommit, null, log);
  293.     }

  294.     @Override
  295.     public Object getServiceManager(IProjectInfo dao, ServiceManagerProperties smProperties, Logger log) throws DAOFactoryException{
  296.         return this.getServiceManager(dao, null, null, null, smProperties, log);
  297.     }
  298.     @Override
  299.     public Object getServiceManager(IProjectInfo dao, boolean autoCommit, ServiceManagerProperties smProperties, Logger log) throws DAOFactoryException{
  300.         return this.getServiceManager(dao, null, null, autoCommit, smProperties, log);
  301.     }
  302.     @Override
  303.     public Object getServiceManager(IProjectInfo dao, DataSource ds, ServiceManagerProperties smProperties, Logger log) throws DAOFactoryException{
  304.         return this.getServiceManager(dao, ds, null, null, smProperties, log);
  305.     }
  306.     @Override
  307.     public Object getServiceManager(IProjectInfo dao, DataSource ds,boolean autoCommit, ServiceManagerProperties smProperties, Logger log) throws DAOFactoryException{
  308.         return this.getServiceManager(dao, ds, null, autoCommit, smProperties, log);
  309.     }
  310.     @Override
  311.     public Object getServiceManager(IProjectInfo dao, Connection connection, ServiceManagerProperties smProperties, Logger log) throws DAOFactoryException{
  312.         return this.getServiceManager(dao, null, connection, null, smProperties, log);
  313.     }
  314.     @Override
  315.     public Object getServiceManager(IProjectInfo dao, Connection connection,boolean autoCommit, ServiceManagerProperties smProperties, Logger log) throws DAOFactoryException{
  316.         return this.getServiceManager(dao, null, connection, autoCommit, smProperties, log);
  317.     }

  318. }