StatisticheIndexUtils.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.core.statistiche.utils;

  21. import java.util.ArrayList;
  22. import java.util.List;

  23. import org.openspcoop2.core.commons.ExpressionUtils;
  24. import org.openspcoop2.core.statistiche.StatisticaGiornaliera;
  25. import org.openspcoop2.core.statistiche.StatisticaMensile;
  26. import org.openspcoop2.core.statistiche.StatisticaOraria;
  27. import org.openspcoop2.core.statistiche.StatisticaSettimanale;
  28. import org.openspcoop2.generic_project.beans.IField;
  29. import org.openspcoop2.generic_project.expression.IExpression;


  30. /**    
  31.  * StatisticheIndexUtils
  32.  *
  33.  * @author Poli Andrea (poli@link.it)
  34.  * @author $Author$
  35.  * @version $Rev$, $Date$
  36.  */
  37. public class StatisticheIndexUtils {

  38.     private static final String PROP_NAME_SOLO_COLONNE_INDICIZZATE_FULL_INDEX = "SoloColonneIndiceFullIndex";
  39.    
  40.     public static void enableSoloColonneIndicizzateFullIndex(IExpression expr) {
  41.         ExpressionUtils.enable(expr, PROP_NAME_SOLO_COLONNE_INDICIZZATE_FULL_INDEX);
  42.     }
  43.     public static boolean isEnabledSoloColonneIndicizzateFullIndex(IExpression expr) {
  44.         return ExpressionUtils.isEnabled(expr, PROP_NAME_SOLO_COLONNE_INDICIZZATE_FULL_INDEX);
  45.     }

  46.    
  47.    
  48.     public static List<IField> LISTA_COLONNE_INDEX_STAT_ORARIA = new ArrayList<IField>();
  49.     static {
  50.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.DATA);
  51.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.STATO_RECORD);
  52.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.ESITO);
  53.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.ESITO_CONTESTO);
  54.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.ID_PORTA);
  55.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.TIPO_PORTA);
  56.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.TIPO_DESTINATARIO);
  57.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.DESTINATARIO);
  58.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.TIPO_SERVIZIO);
  59.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.SERVIZIO);
  60.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.VERSIONE_SERVIZIO);
  61.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.AZIONE);
  62.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.TIPO_MITTENTE);
  63.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.MITTENTE);
  64.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.SERVIZIO_APPLICATIVO);
  65.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.TRASPORTO_MITTENTE);
  66.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.TOKEN_ISSUER);
  67.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.TOKEN_CLIENT_ID);
  68.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.TOKEN_SUBJECT);
  69.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.TOKEN_USERNAME);
  70.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.TOKEN_MAIL);
  71.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.CLIENT_ADDRESS);
  72.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.GRUPPI);
  73.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.URI_API);
  74.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.CLUSTER_ID);
  75.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.NUMERO_TRANSAZIONI);
  76.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.DIMENSIONI_BYTES_BANDA_COMPLESSIVA);
  77.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.DIMENSIONI_BYTES_BANDA_INTERNA);
  78.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.DIMENSIONI_BYTES_BANDA_ESTERNA);
  79.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.LATENZA_TOTALE);
  80.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.LATENZA_PORTA);
  81.         LISTA_COLONNE_INDEX_STAT_ORARIA.add(StatisticaOraria.model().STATISTICA_BASE.LATENZA_SERVIZIO);
  82.     }
  83.    
  84.     public static List<IField> LISTA_COLONNE_INDEX_STAT_GIORNALIERA = new ArrayList<IField>();
  85.     static {
  86.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.DATA);
  87.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.STATO_RECORD);
  88.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.ESITO);
  89.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.ESITO_CONTESTO);
  90.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.ID_PORTA);
  91.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.TIPO_PORTA);
  92.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.TIPO_DESTINATARIO);
  93.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.DESTINATARIO);
  94.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.TIPO_SERVIZIO);
  95.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.SERVIZIO);
  96.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.VERSIONE_SERVIZIO);
  97.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.AZIONE);
  98.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.TIPO_MITTENTE);
  99.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.MITTENTE);
  100.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.SERVIZIO_APPLICATIVO);
  101.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.TRASPORTO_MITTENTE);
  102.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.TOKEN_ISSUER);
  103.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.TOKEN_CLIENT_ID);
  104.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.TOKEN_SUBJECT);
  105.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.TOKEN_USERNAME);
  106.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.TOKEN_MAIL);
  107.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.CLIENT_ADDRESS);
  108.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.GRUPPI);
  109.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.URI_API);
  110.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.CLUSTER_ID);
  111.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.NUMERO_TRANSAZIONI);
  112.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.DIMENSIONI_BYTES_BANDA_COMPLESSIVA);
  113.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.DIMENSIONI_BYTES_BANDA_INTERNA);
  114.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.DIMENSIONI_BYTES_BANDA_ESTERNA);
  115.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.LATENZA_TOTALE);
  116.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.LATENZA_PORTA);
  117.         LISTA_COLONNE_INDEX_STAT_GIORNALIERA.add(StatisticaGiornaliera.model().STATISTICA_BASE.LATENZA_SERVIZIO);
  118.     }
  119.  
  120.     public static List<IField> LISTA_COLONNE_INDEX_STAT_SETTIMANALE = new ArrayList<IField>();
  121.     static {
  122.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.DATA);
  123.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.STATO_RECORD);
  124.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.ESITO);
  125.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.ESITO_CONTESTO);
  126.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.ID_PORTA);
  127.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.TIPO_PORTA);
  128.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.TIPO_DESTINATARIO);
  129.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.DESTINATARIO);
  130.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.TIPO_SERVIZIO);
  131.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.SERVIZIO);
  132.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.VERSIONE_SERVIZIO);
  133.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.AZIONE);
  134.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.TIPO_MITTENTE);
  135.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.MITTENTE);
  136.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.SERVIZIO_APPLICATIVO);
  137.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.TRASPORTO_MITTENTE);
  138.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.TOKEN_ISSUER);
  139.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.TOKEN_CLIENT_ID);
  140.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.TOKEN_SUBJECT);
  141.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.TOKEN_USERNAME);
  142.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.TOKEN_MAIL);
  143.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.CLIENT_ADDRESS);
  144.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.GRUPPI);
  145.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.URI_API);
  146.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.CLUSTER_ID);
  147.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.NUMERO_TRANSAZIONI);
  148.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.DIMENSIONI_BYTES_BANDA_COMPLESSIVA);
  149.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.DIMENSIONI_BYTES_BANDA_INTERNA);
  150.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.DIMENSIONI_BYTES_BANDA_ESTERNA);
  151.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.LATENZA_TOTALE);
  152.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.LATENZA_PORTA);
  153.         LISTA_COLONNE_INDEX_STAT_SETTIMANALE.add(StatisticaSettimanale.model().STATISTICA_BASE.LATENZA_SERVIZIO);
  154.     }
  155.    
  156.     public static List<IField> LISTA_COLONNE_INDEX_STAT_MENSILE = new ArrayList<IField>();
  157.     static {
  158.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.DATA);
  159.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.STATO_RECORD);
  160.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.ESITO);
  161.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.ESITO_CONTESTO);
  162.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.ID_PORTA);
  163.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.TIPO_PORTA);
  164.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.TIPO_DESTINATARIO);
  165.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.DESTINATARIO);
  166.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.TIPO_SERVIZIO);
  167.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.SERVIZIO);
  168.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.VERSIONE_SERVIZIO);
  169.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.AZIONE);
  170.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.TIPO_MITTENTE);
  171.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.MITTENTE);
  172.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.SERVIZIO_APPLICATIVO);
  173.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.TRASPORTO_MITTENTE);
  174.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.TOKEN_ISSUER);
  175.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.TOKEN_CLIENT_ID);
  176.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.TOKEN_SUBJECT);
  177.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.TOKEN_USERNAME);
  178.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.TOKEN_MAIL);
  179.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.CLIENT_ADDRESS);
  180.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.GRUPPI);
  181.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.URI_API);
  182.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.CLUSTER_ID);
  183.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.NUMERO_TRANSAZIONI);
  184.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.DIMENSIONI_BYTES_BANDA_COMPLESSIVA);
  185.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.DIMENSIONI_BYTES_BANDA_INTERNA);
  186.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.DIMENSIONI_BYTES_BANDA_ESTERNA);
  187.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.LATENZA_TOTALE);
  188.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.LATENZA_PORTA);
  189.         LISTA_COLONNE_INDEX_STAT_MENSILE.add(StatisticaMensile.model().STATISTICA_BASE.LATENZA_SERVIZIO);
  190.     }

  191. }