PropertiesReader.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.utils.properties;
- import java.util.Properties;
- import org.openspcoop2.utils.UtilsException;
- import org.openspcoop2.utils.resources.MapReader;
- /**
- * Lettore di file properties, che permette di interpretare anche le variabili di sistema
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class PropertiesReader extends MapReader<Object, Object> {
-
- public PropertiesReader(Properties properties, boolean readCallsNotSynchronized){
- super(properties, readCallsNotSynchronized);
- }
-
- public String getValue(String key) throws UtilsException{
- Object valueObject = super.getValue(key);
- if(valueObject!=null){
- if(!(valueObject instanceof String)){
- throw new UtilsException("Proprieta '"+key+"' non e' di tipo java.lang.String (trovato tipo: ["+valueObject.getClass().getName()+"] valore: ["+valueObject+"])");
- }
- String value = (String) valueObject;
- return value.trim();
- }
- else{
- return null;
- }
- }
-
- public String convertEnvProperties(String value)throws UtilsException{
- return this.convertEnvProperties(value, false);
- }
- public String convertEnvProperties(String value, boolean convertKeyEnvProperties)throws UtilsException{
- String label = "del valore";
- if(convertKeyEnvProperties){
- label = "della chiave";
- }
- while (value.indexOf("${")!=-1){
- int indexStart = value.indexOf("${");
- int indexEnd = value.indexOf("}");
- if(indexEnd==-1){
- throw new UtilsException("Errore durante l'interpretazione "+label+" ["+value+"]: ${ utilizzato senza la rispettiva chiusura }");
- }
- String nameSystemProperty = value.substring(indexStart+"${".length(),indexEnd);
- String valueSystemProperty = System.getenv(nameSystemProperty); // sistema
- if(valueSystemProperty==null) {
- valueSystemProperty = System.getProperty(nameSystemProperty); // java
- }
- if(valueSystemProperty==null){
- throw new UtilsException("Errore durante l'interpretazione "+label+" ["+value+"]: variabile di sistema o java ${"+nameSystemProperty+"} non esistente");
- }
- value = value.replace("${"+nameSystemProperty+"}", valueSystemProperty);
- }
- return value;
- }
-
- public String getValue_convertEnvProperties(String key)throws UtilsException{
- String value = this.getValue(key);
- if(value!=null)
- value = this.convertEnvProperties(value);
- return value;
- //}
- }
-
- /**
- * Legge le proprieta' che possiedono un nome che inizia con un determinato prefisso
- *
- * @param prefix
- * @return java.util.Properties
- * @throws UtilsException
- */
- public java.util.Properties readProperties (String prefix)throws UtilsException{
- java.util.Properties prop = new java.util.Properties();
- try{
-
- java.util.Enumeration<?> keys = this.keys();
- while (keys.hasMoreElements()) {
- Object keyIt = keys.nextElement();
- if(keyIt instanceof String){
- String property = (String) keyIt;
- if(property.startsWith(prefix)){
- String key = (property.substring(prefix.length()));
- if(key != null)
- key = key.trim();
- String value = this.getValue(property);
- if(value!=null)
- value = (value).trim();
- if(key!=null && value!=null){
- prop.setProperty(key,value);
- }
- }
- }
- }
- return prop;
- }catch(java.lang.Exception e) {
- throw new UtilsException("readProperties Riscontrato errore durante la lettura delle propriete con prefisso ["+prefix+"]: "+e.getMessage(),e);
- }
- }
-
- /**
- * Legge le proprieta' che possiedono un nome che inizia con un determinato prefisso
- *
- * @param prefix
- * @return java.util.Properties
- * @throws UtilsException
- */
- public java.util.Properties readProperties_convertEnvProperties (String prefix)throws UtilsException{
- return this.readProperties_convertEnvProperties(prefix,false);
- }
- public java.util.Properties readProperties_convertEnvProperties (String prefix, boolean convertKeyEnvProperties)throws UtilsException{
- java.util.Properties prop = new java.util.Properties();
- try{
- java.util.Properties propTmp = this.readProperties(prefix);
- java.util.Enumeration<?> en = propTmp.propertyNames();
- for (; en.hasMoreElements() ;) {
- String property = (String) en.nextElement();
- String value = null;
- if(property!=null) {
- value = propTmp.getProperty(property);
- }
- if(value!=null){
- value = value.trim();
- value = this.convertEnvProperties(value);
- }
- if(property!=null && value!=null){
- if(convertKeyEnvProperties){
- prop.setProperty(this.convertEnvProperties(property,true),value);
- }
- else{
- prop.setProperty(property,value);
- }
- }
- }
- return prop;
- }catch(java.lang.Exception e) {
- throw new UtilsException("readProperties Riscontrato errore durante la lettura delle propriete con prefisso ["+prefix+"]: "+e.getMessage(),e);
- }
- }
-
- public java.util.Enumeration<?> propertyNames(){
- return this.keys();
- }
-
- }