ReadPropertiesUtilities.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.web.lib.mvc.properties.utils;

  21. import java.util.ArrayList;
  22. import java.util.List;
  23. import java.util.Map;
  24. import java.util.Properties;

  25. import org.apache.commons.lang.StringUtils;
  26. import org.openspcoop2.core.commons.CoreException;
  27. import org.openspcoop2.core.config.driver.db.DriverConfigurazioneDB_genericPropertiesDriver;
  28. import org.openspcoop2.core.mvc.properties.Collection;
  29. import org.openspcoop2.core.mvc.properties.Config;
  30. import org.openspcoop2.core.mvc.properties.Item;
  31. import org.openspcoop2.core.mvc.properties.Section;
  32. import org.openspcoop2.core.mvc.properties.Subsection;
  33. import org.openspcoop2.core.mvc.properties.constants.ItemType;
  34. import org.openspcoop2.core.mvc.properties.provider.ExternalResources;
  35. import org.openspcoop2.core.mvc.properties.provider.IProvider;
  36. import org.openspcoop2.core.mvc.properties.provider.ProviderException;
  37. import org.openspcoop2.core.mvc.properties.utils.Costanti;
  38. import org.openspcoop2.utils.resources.ClassLoaderUtilities;
  39. import org.openspcoop2.web.lib.mvc.properties.beans.ConfigBean;
  40. import org.openspcoop2.web.lib.mvc.properties.beans.ItemBean;
  41. import org.openspcoop2.web.lib.mvc.properties.beans.SectionBean;
  42. import org.openspcoop2.web.lib.mvc.properties.beans.SubsectionBean;
  43. import org.openspcoop2.web.lib.mvc.properties.exception.ValidationException;

  44. /***
  45.  *
  46.  * ReadPropertiesUtilities utilities per la lettura della configurazione.
  47.  *
  48.  * @author Pintori Giuliano (pintori@link.it)
  49.  * @author $Author$
  50.  * @version $Rev$, $Date$
  51.  *
  52.  */
  53. public class ReadPropertiesUtilities {
  54.    
  55.     private ReadPropertiesUtilities() {}
  56.    
  57.     public static List<String> getListaNomiProperties(Config config){
  58.         List<String> lista = new ArrayList<>();
  59.        
  60.         org.openspcoop2.core.mvc.properties.Properties properties = config.getProperties();
  61.         if(properties != null) {
  62.             List<Collection> collectionList = properties.getCollectionList();
  63.             for (Collection collection : collectionList) {
  64.                 lista.add(collection.getName());
  65.             }
  66.         }
  67.        
  68.         return lista;
  69.     }

  70.     public static ConfigBean leggiConfigurazione(Config config, Map<String, Properties> propertiesMap, ExternalResources externalResources) throws ValidationException, CoreException, ProviderException {
  71.        
  72.         IProvider provider = null;
  73.         if(StringUtils.isNotEmpty(config.getProvider())) {
  74.             try {
  75.                 provider = (IProvider) ClassLoaderUtilities.newInstance(config.getProvider());
  76.             }catch(Exception e) {
  77.                 throw new CoreException("Errore durante l'istanziazione del provider ["+config.getProvider()+"]: "+e.getMessage(),e);
  78.             }
  79.         }
  80.        
  81.         ConfigBean configurazione = new ConfigBean(provider);
  82.        
  83.         configurazione.setId(config.getId());
  84.                
  85.         ValidationEngine.validateConfig(config, externalResources);
  86.        
  87.         configurazione.getListaNomiProperties().addAll(getListaNomiProperties(config));
  88.        
  89.         List<Section> sectionList = config.getSectionList();
  90.        
  91.         for (int i= 0; i < sectionList.size() ; i++) {
  92.             Section section = sectionList.get(i);
  93.             addSectionBean(configurazione, section,"s"+i,propertiesMap, externalResources);
  94.         }
  95.        
  96.         return configurazione;
  97.     }

  98.     public static void addSectionBean(ConfigBean configurazione, Section section, String sectionIdx, Map<String, Properties> propertiesMap, ExternalResources externalResources) throws ValidationException, ProviderException {
  99.         SectionBean sectionBean = new SectionBean(section,sectionIdx, configurazione.getProvider());
  100.         configurazione.addItem(sectionBean);
  101.        
  102.         // aggiungo gli item
  103.         if(section.getItemList() != null) {
  104.             for (Item item : section.getItemList()) {
  105.                 addItemBean(configurazione,item,propertiesMap, externalResources);
  106.             }
  107.         }
  108.        
  109.         // aggiungo le sotto sezioni
  110.         if(section.getSubsectionList() != null) {
  111.             for (int i= 0; i < section.getSubsectionList().size() ; i++) {
  112.                 Subsection subSection  = section.getSubsectionList().get(i);
  113.                 addSubsectionBean(configurazione, subSection, sectionIdx+ "_ss"+i ,  propertiesMap, externalResources);
  114.             }
  115.         }
  116.     }
  117.    
  118.     public static void addSubsectionBean(ConfigBean configurazione, Subsection subSection, String subsectionIdx, Map<String, Properties> propertiesMap, ExternalResources externalResources) throws ValidationException, ProviderException {
  119.         SubsectionBean subsectionBean = new SubsectionBean(subSection,subsectionIdx, configurazione.getProvider());
  120.         configurazione.addItem(subsectionBean);
  121.        
  122.         // aggiungo gli item
  123.         if(subSection.getItemList() != null) {
  124.             for (Item item : subSection.getItemList()) {
  125.                 addItemBean(configurazione,item,propertiesMap, externalResources);
  126.             }
  127.         }
  128.     }
  129.    
  130.    
  131.     public static void addItemBean(ConfigBean configurazione, Item item, Map<String, Properties> propertiesMap, ExternalResources externalResources) throws ProviderException, ValidationException {
  132.        
  133.         if(item==null) {
  134.             throw new ProviderException("Item undefined");
  135.         }
  136.         if(configurazione==null) {
  137.             throw new ProviderException("Config undefined");
  138.         }
  139.        
  140.         if(
  141.                 (ItemType.LOCK.equals(item.getType()) || ItemType.LOCK_HIDDEN.equals(item.getType()))  
  142.                 &&
  143.                 configurazione.getId()!=null
  144.                 &&
  145.                 item.getProperty()!=null && item.getProperty().getName()!=null
  146.         ) {
  147.             DriverConfigurazioneDB_genericPropertiesDriver.addConfidentialProperty(configurazione.getId(), item.getProperty().getName());
  148.         }
  149.        
  150.         ItemBean itemBean = new ItemBean(item, item.getName(), configurazione.getProvider());
  151.         String name = item.getProperty() != null ? item.getProperty().getName() : item.getName();
  152.        
  153.         String collectionName = item.getProperty().getProperties();
  154.         if(collectionName==null) {
  155.             collectionName = Costanti.NOME_MAPPA_PROPERTIES_DEFAULT;
  156.         }
  157.        
  158.         String propertyValue = getPropertyValue(propertiesMap, name, collectionName);
  159. /**     System.out.println("READ -> Item: Name ["+item.getName()+"]-----------------");*/  
  160.        
  161.         addItemBean(item, propertiesMap, externalResources,
  162.                 propertyValue,
  163.                 name, itemBean,
  164.                 collectionName);
  165.        
  166.         configurazione.addItem(itemBean);
  167.     }
  168.     private static void addItemBean(Item item, Map<String, Properties> propertiesMap, ExternalResources externalResources,
  169.             String propertyValue,
  170.             String name, ItemBean itemBean,
  171.             String collectionName) throws ProviderException {
  172.         // Lettura di un valore aggregato
  173.         if(item.getProperty() != null && item.getProperty().isAppend()) {
  174.             // estraggo il valore della property che contiene la sequenza delle chiavi salvate
  175.             String propertiesKeysValues = getPropertyValue(propertiesMap, Costanti.PRE_KEY_PROPERTIES_DEFAULT + name, collectionName);
  176.             if(propertiesKeysValues != null && propertyValue!=null) {
  177.                 String [] chiaviSalvate = propertiesKeysValues.split(Costanti.KEY_PROPERTIES_DEFAULT_SEPARATOR);
  178.                 String [] propertyValueSplit = propertyValue.split(item.getProperty().getAppendSeparator());
  179.                
  180. /**             System.out.println("READ -> SPLITPATTERN ["+item.getProperty().getAppendSeparator()+"]");
  181. //              System.out.println("READ -> #KEYS ["+chiaviSalvate.length+"] #VALUES ["+propertyValueSplit.length+"]");
  182. //              System.out.println("READ -> KEYS ["+propertiesKeysValues+"] VALUES ["+propertyValue+"]");*/
  183.                
  184.                 String propertyValueTmp = null;
  185.                 for (int j = 0; j < chiaviSalvate.length; j++) {
  186.                     String key = chiaviSalvate[j];
  187. /**                 System.out.println("READ -> CHECK KEY ["+key+"] ITEM ["+item.getName()+"]");*/  
  188.                     if(key.equals(item.getName())) {
  189.                         propertyValueTmp = propertyValueSplit[j];
  190. /**                     System.out.println("READ -> KEY ["+key+"] Values ["+propertyValueTmp+"]");*/  
  191.                         break;
  192.                     }
  193.                 }
  194.                
  195.                 propertyValue = propertyValueTmp;
  196.             }
  197.         }
  198.        
  199. /**     System.out.println("READ -> Item: Name ["+item.getName()+"] Value ["+propertyValue+"], INIT in corso...");*/  
  200.         itemBean.init(propertyValue, externalResources);
  201. /**     System.out.println("READ -> INIT -> Item: Name ["+item.getName()+"] Value ["+itemBean.getValue()+"]");  
  202.        
  203. //      System.out.println("----------------------------------------\n");*/

  204.     }



  205.     public static String getPropertyValue(Map<String, Properties> propertiesMap, String key, String collectionName) {
  206.         if(propertiesMap == null)
  207.             return null;
  208.        
  209.         if(!propertiesMap.containsKey(collectionName)) {
  210.             return null;
  211.         }
  212.        
  213.         Properties p = propertiesMap.get(collectionName);
  214.         return p.getProperty(key);
  215.        
  216.     }
  217. }