Loader.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.utils.resources;

  21. import java.lang.reflect.Constructor;
  22. import java.lang.reflect.InvocationTargetException;
  23. import java.util.HashMap;

  24. /**
  25.  * Loader
  26.  *
  27.  *
  28.  * @author Poli Andrea
  29.  * @author $Author$
  30.  * @version $Rev$, $Date$
  31.  */
  32. public class Loader {

  33.    
  34.     private static Loader loader = null;
  35.     public static Loader getInstance(){
  36.         if(Loader.loader==null){
  37.             // spotbugs warning 'SING_SINGLETON_GETTER_NOT_SYNCHRONIZED'
  38.             synchronized (Loader.class) {
  39.                 initialize();
  40.             }
  41.         }
  42.         return Loader.loader;
  43.     }
  44.     public static synchronized void initialize() {
  45.         if(Loader.loader==null){
  46.             Loader.loader = new Loader();
  47.         }
  48.     }
  49.     public static synchronized void initialize(String classLoaderName) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
  50.         if(Loader.loader==null){
  51.             Loader.loader = new Loader(classLoaderName);
  52.         }
  53.     }
  54.     public static synchronized void initialize(java.lang.ClassLoader classLoader){
  55.         if(Loader.loader==null){
  56.             Loader.loader = new Loader(classLoader);
  57.         }
  58.     }
  59.     public static synchronized void update(String classLoaderName) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
  60.         Loader.loader = new Loader(classLoaderName);
  61.     }
  62.     public static synchronized void update(java.lang.ClassLoader classLoader){
  63.         Loader.loader = new Loader(classLoader);
  64.     }
  65.    
  66.    
  67.     java.lang.ClassLoader classLoader = null;
  68.     public Loader(){
  69.     }
  70.     public Loader(String classLoaderName) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
  71.         Loader lTmp = new Loader();
  72.         Class<?> cLoader = lTmp.forName(classLoaderName);
  73.         try{
  74.             Constructor<?> constructor = cLoader.getConstructor(java.lang.ClassLoader.class);
  75.             this.classLoader = (java.lang.ClassLoader ) constructor.newInstance(this.getClass().getClassLoader());
  76.         }catch(NoSuchMethodException not){
  77.             throw new InstantiationException(not.getMessage());
  78.         }catch(InvocationTargetException not){
  79.             throw new InstantiationException(not.getMessage());
  80.         }
  81.     }
  82.     public Loader(java.lang.ClassLoader classLoader){
  83.         this.classLoader = classLoader;
  84.     }
  85.    
  86.     public Object newInstance(String className) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException{
  87.         return this.newInstance(forName(className));
  88.     }
  89.     public Object newInstance(Class<?> c) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException{
  90.         return c.getConstructor().newInstance();
  91.     }
  92.    
  93.     public Object newInstance(String className,Object ... params) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException{
  94.         if(params==null || params.length<=0){
  95.             return newInstance(className);
  96.         }
  97.         Class<?> c = forName(className);
  98.         return this.newInstance(c, params);
  99.     }
  100.     public Object newInstance(Class<?> c,Object ... params) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException{
  101.         if(params==null || params.length<=0){
  102.             return newInstance(c);
  103.         }
  104.        
  105.         Constructor<?> constructor = null;
  106.         if(params.length==1){
  107.             constructor = c.getConstructor(params[0].getClass());
  108.         }
  109.         else if(params.length==2){
  110.             constructor = c.getConstructor(params[0].getClass(),params[1].getClass());
  111.         }
  112.         else if(params.length==3){
  113.             constructor = c.getConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass());
  114.         }
  115.         else if(params.length==4){
  116.             constructor = c.getConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass(),
  117.                     params[3].getClass());
  118.         }
  119.         else if(params.length==5){
  120.             constructor = c.getConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass(),
  121.                     params[3].getClass(),params[4].getClass());
  122.         }
  123.         else if(params.length==6){
  124.             constructor = c.getConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass(),
  125.                     params[3].getClass(),params[4].getClass(),params[5].getClass());
  126.         }
  127.         else if(params.length==7){
  128.             constructor = c.getConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass(),
  129.                     params[3].getClass(),params[4].getClass(),params[5].getClass(),
  130.                     params[6].getClass());
  131.         }
  132.         else if(params.length==8){
  133.             constructor = c.getConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass(),
  134.                     params[3].getClass(),params[4].getClass(),params[5].getClass(),
  135.                     params[6].getClass(),params[7].getClass());
  136.         }
  137.         else if(params.length==9){
  138.             constructor = c.getConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass(),
  139.                     params[3].getClass(),params[4].getClass(),params[5].getClass(),
  140.                     params[6].getClass(),params[7].getClass(),params[8].getClass());
  141.         }
  142.         else if(params.length==10){
  143.             constructor = c.getConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass(),
  144.                     params[3].getClass(),params[4].getClass(),params[5].getClass(),
  145.                     params[6].getClass(),params[7].getClass(),params[8].getClass(),
  146.                     params[9].getClass());
  147.         }
  148.         else if(params.length==11){
  149.             constructor = c.getConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass(),
  150.                     params[3].getClass(),params[4].getClass(),params[5].getClass(),
  151.                     params[6].getClass(),params[7].getClass(),params[8].getClass(),
  152.                     params[9].getClass(),params[10].getClass());
  153.         }
  154.         else if(params.length==12){
  155.             constructor = c.getConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass(),
  156.                     params[3].getClass(),params[4].getClass(),params[5].getClass(),
  157.                     params[6].getClass(),params[7].getClass(),params[8].getClass(),
  158.                     params[9].getClass(),params[10].getClass(),params[11].getClass());
  159.         }
  160.         else{
  161.             throw new InstantiationException("Method not supported more than 12 parameters");
  162.         }
  163.         return constructor.newInstance(params);
  164.     }
  165.    
  166.     public Object newInstance_declaredConstructor(String className) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException{
  167.         return this.newInstance_declaredConstructor(forName(className));
  168.     }
  169.     public Object newInstance_declaredConstructor(Class<?> c) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException{
  170.         Constructor<?> constructor = c.getDeclaredConstructor();
  171.         constructor.setAccessible(true);
  172.         return constructor.newInstance();
  173.     }
  174.    
  175.     public Object newInstance_declaredConstructor(String className,Object ... params) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException{
  176.         if(params==null || params.length<=0){
  177.             return newInstance_declaredConstructor(className);
  178.         }
  179.         Class<?> c = forName(className);
  180.         return this.newInstance_declaredConstructor(c, params);
  181.     }
  182.     public Object newInstance_declaredConstructor(Class<?> c,Object ... params) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException{
  183.         if(params==null || params.length<=0){
  184.             return newInstance(c);
  185.         }
  186.        
  187.         Constructor<?> constructor = null;
  188.         if(params.length==1){
  189.             constructor = c.getDeclaredConstructor(params[0].getClass());
  190.         }
  191.         else if(params.length==2){
  192.             constructor = c.getDeclaredConstructor(params[0].getClass(),params[1].getClass());
  193.         }
  194.         else if(params.length==3){
  195.             constructor = c.getDeclaredConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass());
  196.         }
  197.         else if(params.length==4){
  198.             constructor = c.getDeclaredConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass(),
  199.                     params[3].getClass());
  200.         }
  201.         else if(params.length==5){
  202.             constructor = c.getDeclaredConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass(),
  203.                     params[3].getClass(),params[4].getClass());
  204.         }
  205.         else if(params.length==6){
  206.             constructor = c.getDeclaredConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass(),
  207.                     params[3].getClass(),params[4].getClass(),params[5].getClass());
  208.         }
  209.         else if(params.length==7){
  210.             constructor = c.getDeclaredConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass(),
  211.                     params[3].getClass(),params[4].getClass(),params[5].getClass(),
  212.                     params[6].getClass());
  213.         }
  214.         else if(params.length==8){
  215.             constructor = c.getDeclaredConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass(),
  216.                     params[3].getClass(),params[4].getClass(),params[5].getClass(),
  217.                     params[6].getClass(),params[7].getClass());
  218.         }
  219.         else if(params.length==9){
  220.             constructor = c.getDeclaredConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass(),
  221.                     params[3].getClass(),params[4].getClass(),params[5].getClass(),
  222.                     params[6].getClass(),params[7].getClass(),params[8].getClass());
  223.         }
  224.         else if(params.length==10){
  225.             constructor = c.getDeclaredConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass(),
  226.                     params[3].getClass(),params[4].getClass(),params[5].getClass(),
  227.                     params[6].getClass(),params[7].getClass(),params[8].getClass(),
  228.                     params[9].getClass());
  229.         }
  230.         else if(params.length==11){
  231.             constructor = c.getDeclaredConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass(),
  232.                     params[3].getClass(),params[4].getClass(),params[5].getClass(),
  233.                     params[6].getClass(),params[7].getClass(),params[8].getClass(),
  234.                     params[9].getClass(),params[10].getClass());
  235.         }
  236.         else if(params.length==12){
  237.             constructor = c.getDeclaredConstructor(params[0].getClass(),params[1].getClass(),params[2].getClass(),
  238.                     params[3].getClass(),params[4].getClass(),params[5].getClass(),
  239.                     params[6].getClass(),params[7].getClass(),params[8].getClass(),
  240.                     params[9].getClass(),params[10].getClass(),params[11].getClass());
  241.         }
  242.         else{
  243.             throw new InstantiationException("Method not supported more than 12 parameters");
  244.         }
  245.         constructor.setAccessible(true);
  246.         return constructor.newInstance(params);
  247.     }
  248.    
  249.     public Class<?> forName(String className) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
  250.         Class<?> c = null;
  251.         if(this.classLoader!=null){
  252.             //c = this.classLoader.loadClass(className);
  253.             c = getClass(className, this.classLoader);
  254.         }else{
  255.             //c = Class.forName(className);
  256.             c = getClass(className, null);
  257.         }  
  258.         return c;
  259.     }
  260.     private static HashMap<String, Class<?>> mapClass = new HashMap<String, Class<?>>();
  261.     private static Class<?> getClass(String className,java.lang.ClassLoader classLoader) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
  262.         if(mapClass.containsKey(className)==false){
  263.             initClass(className,classLoader);
  264.         }
  265.         return mapClass.get(className);
  266.     }
  267.     private static synchronized void initClass(String className,java.lang.ClassLoader classLoader) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
  268.         if(mapClass.containsKey(className)==false){
  269.             Class<?> c = null;
  270.             if(classLoader!=null){
  271.                 c = classLoader.loadClass(className);
  272.             }else{
  273.                 c = Class.forName(className);
  274.             }  
  275.             mapClass.put(className, c);
  276.         }
  277.     }
  278. }