it.cnr.contab.util.Utility Maven / Gradle / Ivy
/*
* Copyright (C) 2019 Consiglio Nazionale delle Ricerche
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
/*
* Created on Sep 28, 2005
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package it.cnr.contab.util;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.rmi.RemoteException;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.jar.Attributes;
import java.util.jar.Manifest;
import javax.ejb.EJBException;
import javax.servlet.ServletException;
import it.cnr.contab.progettiric00.comp.RimodulaProgettoRicercaComponent;
import it.cnr.contab.progettiric00.ejb.ProgettoRicercaComponentSession;
import it.cnr.contab.progettiric00.ejb.RimodulaProgettoRicercaComponentSession;
import it.cnr.contab.utente00.ejb.RuoloComponentSession;
import it.cnr.contab.utente00.ejb.UtenteComponentSession;
import it.cnr.contab.varstanz00.ejb.VariazioniStanziamentoResiduoComponentSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.core.type.filter.AssignableTypeFilter;
import it.cnr.contab.anagraf00.ejb.TerzoComponentSession;
import it.cnr.contab.bollo00.ejb.AttoBolloComponentSession;
import it.cnr.contab.bollo00.comp.TipoAttoBolloComponent;
import it.cnr.contab.bollo00.ejb.TipoAttoBolloComponentSession;
import it.cnr.contab.client.docamm.FatturaAttiva;
import it.cnr.contab.config00.comp.CRUDConfigAssEvoldEvnewComponent;
import it.cnr.contab.config00.ejb.CRUDConfigAssEvoldEvnewComponentSession;
import it.cnr.contab.config00.ejb.Classificazione_vociComponentSession;
import it.cnr.contab.config00.ejb.Configurazione_cnrComponentSession;
import it.cnr.contab.config00.ejb.Parametri_cdsComponentSession;
import it.cnr.contab.config00.ejb.Parametri_cnrComponentSession;
import it.cnr.contab.config00.ejb.Parametri_enteComponentSession;
import it.cnr.contab.config00.ejb.Unita_organizzativaComponentSession;
import it.cnr.contab.docamm00.ejb.FatturaAttivaSingolaComponentSession;
import it.cnr.contab.docamm00.ejb.FatturaPassivaComponentSession;
import it.cnr.contab.doccont00.ejb.DistintaCassiereComponentSession;
import it.cnr.contab.doccont00.ejb.MandatoComponentSession;
import it.cnr.contab.doccont00.ejb.ReversaleComponentSession;
import it.cnr.contab.doccont00.ejb.SaldoComponentSession;
import it.cnr.contab.gestiva00.ejb.LiquidIvaInterfComponentSession;
import it.cnr.contab.incarichi00.ejb.IncarichiProceduraComponentSession;
import it.cnr.contab.incarichi00.ejb.IncarichiRepertorioComponentSession;
import it.cnr.contab.incarichi00.ejb.RepertorioLimitiComponentSession;
import it.cnr.contab.ordmag.ejb.NumeratoriOrdMagComponentSession;
import it.cnr.contab.ordmag.magazzino.ejb.MovimentiMagComponentSession;
import it.cnr.contab.ordmag.ordini.ejb.OrdineAcqComponentSession;
import it.cnr.contab.pdg00.ejb.PdGVariazioniComponentSession;
import it.cnr.contab.prevent01.ejb.PdgAggregatoModuloComponentSession;
import it.cnr.contab.prevent01.ejb.PdgContrSpeseComponentSession;
import it.cnr.contab.progettiric00.ejb.geco.ProgettoGecoComponentSession;
import it.cnr.jada.bulk.OggettoBulk;
import it.cnr.jada.ejb.AdminSession;
import it.cnr.jada.util.ejb.EJBCommonServices;
/**
* @author mspasiano
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public final class Utility {
private transient static final Logger logger = LoggerFactory.getLogger(Utility.class);
public static final String MANIFEST_PATH = "/META-INF/MANIFEST.MF";
public static final String APPLICATION_TITLE = "SIGLA - Sistema Informativo per la Gestione delle Linee di Attività";
public static final java.math.BigDecimal ZERO = new java.math.BigDecimal(0);
public static String TIPO_GESTIONE_SPESA = "S";
public static String TIPO_GESTIONE_ENTRATA = "E";
public static final BigDecimal CENTO = new BigDecimal(100);
/**
* Restituisce true se i due oggetti sono uguali o sono entrambi null
* false altrimenti
*/
public static boolean equalsNull(Object object1, Object object2){
if (object1 == null && object2 == null)
return true;
else if ((object1 == null && object2 != null)||(object1 != null && object2 == null))
return false;
else if (object1 != null && object2 != null)
return object1.equals(object2);
return false;
}
/**
* Restituisce true se i due oggetti sono uguali o sono entrambi null
* false altrimenti
*/
public static boolean equalsBulkNull(OggettoBulk object1, OggettoBulk object2){
if (object1 == null && object2 == null)
return true;
else if ((object1 == null && object2 != null)||(object1 != null && object2 == null))
return false;
else if (object1 != null && object2 != null)
return object1.equalsByPrimaryKey(object2);
return false;
}
public static BigDecimal nvl(BigDecimal imp, BigDecimal otherImp){
if (imp != null)
return imp;
return otherImp;
}
public static BigDecimal nvl(BigDecimal imp){
if (imp != null)
return imp;
return ZERO;
}
public static String getSiglaVersion(){
String version = "01.001.000";
InputStream is = FatturaAttiva.class.getResourceAsStream(Utility.MANIFEST_PATH);
if (is != null) {
try {
Manifest manifest = new Manifest(is);
Attributes attributes = manifest.getMainAttributes();
version = attributes.getValue("Implementation-Version");
} catch (IOException e) {
logger.warn("IOException", e);
}
}
return version;
}
/**
* Restituisce una Stringa ottenuta sostituendo
* nella stringa sorgente alla stringa pattern la stringa replace,
* se la stringa pattern non è presente restituisce la stringa sorgente
*/
public static String replace(String source, String pattern, String replace)
{
if (source!=null){
final int len = pattern.length();
StringBuffer sb = new StringBuffer();
int found = -1;
int start = 0;
while( (found = source.indexOf(pattern, start) ) != -1) {
sb.append(source.substring(start, found));
sb.append(replace);
start = found + len;
}
sb.append(source.substring(start));
return sb.toString();
}
else
return null;
}
public static String lpad(double d, int size, char pad) {
return lpad(Double.toString(d), size, pad);
}
public static String lpad(long l, int size, char pad) {
return lpad(Long.toString(l), size, pad);
}
public static String lpad(String s, int size, char pad) {
StringBuilder builder = new StringBuilder();
while (builder.length() + s.length() < size) {
builder.append(pad);
}
builder.append(s);
return builder.toString();
}
public static BigDecimal round2Decimali(BigDecimal importo) {
return round(importo,2);
}
public static BigDecimal round6Decimali(BigDecimal importo) {
return round(importo,6);
}
public static BigDecimal round5Decimali(BigDecimal importo) {
return round(importo,5);
}
public static BigDecimal roundIntero(BigDecimal importo) {
return round(importo,0);
}
public static BigDecimal round(BigDecimal importo, int scale) {
importo = nvl(importo);
return importo.setScale(scale,RoundingMode.HALF_UP);
}
public static BigDecimal trunc(BigDecimal importo, int scale) {
importo = nvl(importo);
return importo.setScale(scale,RoundingMode.DOWN);
}
public static BigDecimal ceil(BigDecimal importo, int scale) {
importo = nvl(importo);
return importo.setScale(scale,RoundingMode.UP);
}
public static BigDecimal trunc2Decimali(BigDecimal importo) {
return trunc(nvl(importo),2);
}
public static BigDecimal truncIntero(BigDecimal importo) {
return trunc(nvl(importo),0);
}
/**
* Metodo che effetua una divisione, il cui risultato viene fornito con 2
* cifre decimali ed arrotondamento per difetto o per eccesso
*
* @param dividendo
* Dividendo
* @param divisore
* Divisore
* @return il risultato della divisione
*/
public static BigDecimal divide(BigDecimal dividendo, BigDecimal divisore) {
return dividendo.divide(divisore,2, RoundingMode.HALF_UP);
}
public static BigDecimal divide(BigDecimal dividendo, Integer divisore) {
return dividendo.divide(new BigDecimal(divisore),2,RoundingMode.HALF_UP);
}
public static BigDecimal divide(BigDecimal dividendo, BigDecimal divisore, Integer arrotondamento) {
return dividendo.divide(divisore,arrotondamento,RoundingMode.HALF_UP);
}
public static String NumberToText(int n) {
// metodo wrapper
if (n == 0) {
return "zero";
} else {
return NumberToTextRicorsiva(n);
}
}
public static void main(String[] args) {
System.out.println(NumberToText(new BigDecimal("16754")));
}
public static String NumberToText(BigDecimal importo) {
int parteIntera = importo.intValue();
String parteDecimale = importo.remainder(BigDecimal.ONE).abs().toPlainString();
if (parteDecimale.length() > 1)
parteDecimale = parteDecimale.substring(2);
if (parteIntera == 0) {
return "zero/" + parteDecimale;
} else {
return NumberToTextRicorsiva(parteIntera) + "/" + parteDecimale;
}
}
public static synchronized void loadPersistentInfos() throws ServletException{
ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(true);
provider.addIncludeFilter(new AssignableTypeFilter(OggettoBulk.class));
AdminSession adminSession = (AdminSession) EJBCommonServices.createEJB("JADAEJB_AdminSession");
Set components = provider.findCandidateComponents("it/cnr");
logger.info("Load PersistentInfo start");
for (BeanDefinition component : components){
try {
Class> clazz = Class.forName(component.getBeanClassName());
logger.debug("Load PersistentInfo for class: {}",clazz.getName());
adminSession.loadPersistentInfos(clazz);
if(clazz.getName().endsWith("Bulk")) {
logger.debug("Load BulkInfo for class: {}",clazz.getName());
adminSession.loadBulkInfos(clazz);
}
} catch (Exception e) {
logger.error("Cannot load persistentInfo for class : {}", component.getBeanClassName(), e);
}
}
logger.info("Load PersistentInfo finish");
}
private static String NumberToTextRicorsiva(int n) {
if (n < 0) {
return "meno " + NumberToTextRicorsiva(-n);
} else if (n == 0){
return "";
} else if (n <= 19){
return new String[] { "uno", "due", "tre", "quattro", "cinque",
"sei", "sette", "otto", "nove", "dieci",
"undici", "dodici", "tredici",
"quattordici", "quindici", "sedici",
"diciassette", "diciotto", "diciannove" }[n-1];
} else if (n <= 99) {
String[] vettore =
{ "venti", "trenta", "quaranta", "cinquanta", "sessanta",
"settanta", "ottanta", "novanta" };
String letter = vettore[n / 10 - 2];
int t = n % 10; // t è la prima cifra di n
// se è 1 o 8 va tolta la vocale finale di letter
if (t == 1 || t == 8 ) {
letter = letter.substring(0, letter.length() - 1);
}
return letter + NumberToTextRicorsiva(n % 10);
} else if (n <= 199){
return "cento" + NumberToTextRicorsiva(n % 100);
} else if (n <= 999){
int m = n % 100;
m /= 10; // divisione intera per 10 della variabile
String letter = "cent";
if (m != 8){
letter = letter + "o";
}
return NumberToTextRicorsiva(n / 100) + letter +
NumberToTextRicorsiva(n % 100);
}
else if (n <= 1999){
return "mille" + NumberToTextRicorsiva(n % 1000);
} else if (n <= 999999){
return NumberToTextRicorsiva(n / 1000) + "mila" +
NumberToTextRicorsiva(n % 1000);
}
else if (n <= 1999999){
return "unmilione" + NumberToTextRicorsiva(n % 1000000);
} else if (n <= 999999999){
return NumberToTextRicorsiva(n / 1000000) + "milioni" +
NumberToTextRicorsiva(n % 1000000);
} else if (n <= 1999999999){
return "unmiliardo" + NumberToTextRicorsiva(n % 1000000000);
} else {
return NumberToTextRicorsiva(n / 1000000000) + "miliardi" +
NumberToTextRicorsiva(n % 1000000000);
}
}
public static Predicate distinctByKey(Function super T, Object> keyExtractor) {
Map © 2015 - 2025 Weber Informatics LLC | Privacy Policy