ReadPropertiesUtilities.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 Link.it srl (https://link.it).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3, as published by
- * the Free Software Foundation.
- *
- * 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/>.
- *
- */
- package org.openspcoop2.web.lib.mvc.properties.utils;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.Properties;
- import org.apache.commons.lang.StringUtils;
- import org.openspcoop2.core.commons.CoreException;
- import org.openspcoop2.core.config.driver.db.DriverConfigurazioneDB_genericPropertiesDriver;
- import org.openspcoop2.core.mvc.properties.Collection;
- import org.openspcoop2.core.mvc.properties.Config;
- import org.openspcoop2.core.mvc.properties.Item;
- import org.openspcoop2.core.mvc.properties.Section;
- import org.openspcoop2.core.mvc.properties.Subsection;
- import org.openspcoop2.core.mvc.properties.constants.ItemType;
- import org.openspcoop2.core.mvc.properties.provider.ExternalResources;
- import org.openspcoop2.core.mvc.properties.provider.IProvider;
- import org.openspcoop2.core.mvc.properties.provider.ProviderException;
- import org.openspcoop2.core.mvc.properties.utils.Costanti;
- import org.openspcoop2.utils.resources.ClassLoaderUtilities;
- import org.openspcoop2.web.lib.mvc.properties.beans.ConfigBean;
- import org.openspcoop2.web.lib.mvc.properties.beans.ItemBean;
- import org.openspcoop2.web.lib.mvc.properties.beans.SectionBean;
- import org.openspcoop2.web.lib.mvc.properties.beans.SubsectionBean;
- import org.openspcoop2.web.lib.mvc.properties.exception.ValidationException;
- /***
- *
- * ReadPropertiesUtilities utilities per la lettura della configurazione.
- *
- * @author Pintori Giuliano (pintori@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- *
- */
- public class ReadPropertiesUtilities {
-
- private ReadPropertiesUtilities() {}
-
- public static List<String> getListaNomiProperties(Config config){
- List<String> lista = new ArrayList<>();
-
- org.openspcoop2.core.mvc.properties.Properties properties = config.getProperties();
- if(properties != null) {
- List<Collection> collectionList = properties.getCollectionList();
- for (Collection collection : collectionList) {
- lista.add(collection.getName());
- }
- }
-
- return lista;
- }
- public static ConfigBean leggiConfigurazione(Config config, Map<String, Properties> propertiesMap, ExternalResources externalResources) throws ValidationException, CoreException, ProviderException {
-
- IProvider provider = null;
- if(StringUtils.isNotEmpty(config.getProvider())) {
- try {
- provider = (IProvider) ClassLoaderUtilities.newInstance(config.getProvider());
- }catch(Exception e) {
- throw new CoreException("Errore durante l'istanziazione del provider ["+config.getProvider()+"]: "+e.getMessage(),e);
- }
- }
-
- ConfigBean configurazione = new ConfigBean(provider);
-
- configurazione.setId(config.getId());
-
- ValidationEngine.validateConfig(config, externalResources);
-
- configurazione.getListaNomiProperties().addAll(getListaNomiProperties(config));
-
- List<Section> sectionList = config.getSectionList();
-
- for (int i= 0; i < sectionList.size() ; i++) {
- Section section = sectionList.get(i);
- addSectionBean(configurazione, section,"s"+i,propertiesMap, externalResources);
- }
-
- return configurazione;
- }
- public static void addSectionBean(ConfigBean configurazione, Section section, String sectionIdx, Map<String, Properties> propertiesMap, ExternalResources externalResources) throws ValidationException, ProviderException {
- SectionBean sectionBean = new SectionBean(section,sectionIdx, configurazione.getProvider());
- configurazione.addItem(sectionBean);
-
- // aggiungo gli item
- if(section.getItemList() != null) {
- for (Item item : section.getItemList()) {
- addItemBean(configurazione,item,propertiesMap, externalResources);
- }
- }
-
- // aggiungo le sotto sezioni
- if(section.getSubsectionList() != null) {
- for (int i= 0; i < section.getSubsectionList().size() ; i++) {
- Subsection subSection = section.getSubsectionList().get(i);
- addSubsectionBean(configurazione, subSection, sectionIdx+ "_ss"+i , propertiesMap, externalResources);
- }
- }
- }
-
- public static void addSubsectionBean(ConfigBean configurazione, Subsection subSection, String subsectionIdx, Map<String, Properties> propertiesMap, ExternalResources externalResources) throws ValidationException, ProviderException {
- SubsectionBean subsectionBean = new SubsectionBean(subSection,subsectionIdx, configurazione.getProvider());
- configurazione.addItem(subsectionBean);
-
- // aggiungo gli item
- if(subSection.getItemList() != null) {
- for (Item item : subSection.getItemList()) {
- addItemBean(configurazione,item,propertiesMap, externalResources);
- }
- }
- }
-
-
- public static void addItemBean(ConfigBean configurazione, Item item, Map<String, Properties> propertiesMap, ExternalResources externalResources) throws ProviderException, ValidationException {
-
- if(item==null) {
- throw new ProviderException("Item undefined");
- }
- if(configurazione==null) {
- throw new ProviderException("Config undefined");
- }
-
- if(
- (ItemType.LOCK.equals(item.getType()) || ItemType.LOCK_HIDDEN.equals(item.getType()))
- &&
- configurazione.getId()!=null
- &&
- item.getProperty()!=null && item.getProperty().getName()!=null
- ) {
- DriverConfigurazioneDB_genericPropertiesDriver.addConfidentialProperty(configurazione.getId(), item.getProperty().getName());
- }
-
- ItemBean itemBean = new ItemBean(item, item.getName(), configurazione.getProvider());
- String name = item.getProperty() != null ? item.getProperty().getName() : item.getName();
-
- String collectionName = item.getProperty().getProperties();
- if(collectionName==null) {
- collectionName = Costanti.NOME_MAPPA_PROPERTIES_DEFAULT;
- }
-
- String propertyValue = getPropertyValue(propertiesMap, name, collectionName);
- /** System.out.println("READ -> Item: Name ["+item.getName()+"]-----------------");*/
-
- addItemBean(item, propertiesMap, externalResources,
- propertyValue,
- name, itemBean,
- collectionName);
-
- configurazione.addItem(itemBean);
- }
- private static void addItemBean(Item item, Map<String, Properties> propertiesMap, ExternalResources externalResources,
- String propertyValue,
- String name, ItemBean itemBean,
- String collectionName) throws ProviderException {
- // Lettura di un valore aggregato
- if(item.getProperty() != null && item.getProperty().isAppend()) {
- // estraggo il valore della property che contiene la sequenza delle chiavi salvate
- String propertiesKeysValues = getPropertyValue(propertiesMap, Costanti.PRE_KEY_PROPERTIES_DEFAULT + name, collectionName);
- if(propertiesKeysValues != null && propertyValue!=null) {
- String [] chiaviSalvate = propertiesKeysValues.split(Costanti.KEY_PROPERTIES_DEFAULT_SEPARATOR);
- String [] propertyValueSplit = propertyValue.split(item.getProperty().getAppendSeparator());
-
- /** System.out.println("READ -> SPLITPATTERN ["+item.getProperty().getAppendSeparator()+"]");
- // System.out.println("READ -> #KEYS ["+chiaviSalvate.length+"] #VALUES ["+propertyValueSplit.length+"]");
- // System.out.println("READ -> KEYS ["+propertiesKeysValues+"] VALUES ["+propertyValue+"]");*/
-
- String propertyValueTmp = null;
- for (int j = 0; j < chiaviSalvate.length; j++) {
- String key = chiaviSalvate[j];
- /** System.out.println("READ -> CHECK KEY ["+key+"] ITEM ["+item.getName()+"]");*/
- if(key.equals(item.getName())) {
- propertyValueTmp = propertyValueSplit[j];
- /** System.out.println("READ -> KEY ["+key+"] Values ["+propertyValueTmp+"]");*/
- break;
- }
- }
-
- propertyValue = propertyValueTmp;
- }
- }
-
- /** System.out.println("READ -> Item: Name ["+item.getName()+"] Value ["+propertyValue+"], INIT in corso...");*/
- itemBean.init(propertyValue, externalResources);
- /** System.out.println("READ -> INIT -> Item: Name ["+item.getName()+"] Value ["+itemBean.getValue()+"]");
-
- // System.out.println("----------------------------------------\n");*/
- }
- public static String getPropertyValue(Map<String, Properties> propertiesMap, String key, String collectionName) {
- if(propertiesMap == null)
- return null;
-
- if(!propertiesMap.containsKey(collectionName)) {
- return null;
- }
-
- Properties p = propertiesMap.get(collectionName);
- return p.getProperty(key);
-
- }
- }