PropertyFilterCore.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.utils.serialization;

  21. import org.openspcoop2.utils.checksum.ChecksumAdler;
  22. import org.openspcoop2.utils.checksum.ChecksumCRC;

  23. /**
  24.  * Contiene classe per effettuare un filtro JSON
  25.  *
  26.  * @author Poli Andrea (apoli@link.it)
  27.  * @author $Author$
  28.  * @version $Rev$, $Date$
  29.  */

  30. public class PropertyFilterCore {

  31.     private IDBuilder idBuilder = null;
  32.     private Filter filter = null;
  33.     private ISerializer serializer = null;
  34.    
  35.     public IDBuilder getIdBuilder() {
  36.         return this.idBuilder;
  37.     }
  38.     public void setIdBuilder(IDBuilder idBuilder) {
  39.         this.idBuilder = idBuilder;
  40.     }
  41.     public Filter getFilter() {
  42.         return this.filter;
  43.     }
  44.     public void setFilter(Filter filter) {
  45.         this.filter = filter;
  46.     }
  47.     public ISerializer getSerializer() {
  48.         return this.serializer;
  49.     }
  50.     public void setSerializer(ISerializer serializer) {
  51.         this.serializer = serializer;
  52.     }
  53.     public PropertyFilterCore(Filter filter,IDBuilder idBuilder,ISerializer serializer){
  54.         this.idBuilder = idBuilder;
  55.         this.filter = filter;
  56.         this.serializer = serializer;
  57.     }
  58.     public PropertyFilterCore(Filter filter,ISerializer serializer){
  59.         this.filter = filter;
  60.         this.serializer = serializer;
  61.     }
  62.    
  63.    
  64.     protected void applicaFiltro(Object source, String name, Object value, Class<?> classFilter){
  65.         try{
  66.             //System.out.println("EXCLUDE["+name+"] ID["+this.idBuilder.toID(source,name)+"]");
  67.             FilteredObject oggettoFiltrato = new FilteredObject();
  68.            
  69.             // Identificatore unico risorsa
  70.             String id = null;
  71.             try{
  72.                 if(this.idBuilder==null) {
  73.                     throw new Exception("IDBuilder not initialized");
  74.                 }
  75.                 id = this.idBuilder.toID(source,name);
  76.             }catch(Exception e){
  77.                 // id non esistente per l'oggetto source
  78.                 return;
  79.             }
  80.             if(this.filter.existsFilteredObject(id)){
  81.                 // La libreria di serializzazione invoca piu' volte il solito oggetto
  82.                 return;
  83.             }
  84.             if(this.idBuilder!=null)
  85.                 oggettoFiltrato.setId(id);
  86.            
  87.             // Checksum risorsa filtrata
  88.             long checksum = -1;
  89.             byte[] byteOggetto = null;
  90.             if(value instanceof byte[]){
  91.                 byteOggetto = (byte[])value;
  92.             }else{
  93.                 // Uso serializzazione
  94.                  byteOggetto = this.serializer.getObject(value).getBytes();
  95.             }
  96.             if(FilterChecksumTypes.ADLER.toString().equals(this.filter.getFilterChecksumType().toString())){
  97.                 checksum = ChecksumAdler.checksumAdler32(byteOggetto);
  98.             }else{
  99.                 checksum = ChecksumCRC.checksumCRC32(byteOggetto);
  100.             }
  101.             oggettoFiltrato.setChecksum(checksum);
  102.            
  103.             // ClassType
  104.             oggettoFiltrato.setClassType(classFilter);
  105.            
  106.             this.filter.addFilteredObject(oggettoFiltrato);
  107.            
  108.         }catch(Exception e){
  109.             e.printStackTrace(System.out);
  110.         }
  111.     }
  112. }