PropertyFilterCore.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 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.serialization;
import org.openspcoop2.utils.checksum.ChecksumAdler;
import org.openspcoop2.utils.checksum.ChecksumCRC;
/**
* Contiene classe per effettuare un filtro JSON
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class PropertyFilterCore {
private IDBuilder idBuilder = null;
private Filter filter = null;
private ISerializer serializer = null;
public IDBuilder getIdBuilder() {
return this.idBuilder;
}
public void setIdBuilder(IDBuilder idBuilder) {
this.idBuilder = idBuilder;
}
public Filter getFilter() {
return this.filter;
}
public void setFilter(Filter filter) {
this.filter = filter;
}
public ISerializer getSerializer() {
return this.serializer;
}
public void setSerializer(ISerializer serializer) {
this.serializer = serializer;
}
public PropertyFilterCore(Filter filter,IDBuilder idBuilder,ISerializer serializer){
this.idBuilder = idBuilder;
this.filter = filter;
this.serializer = serializer;
}
public PropertyFilterCore(Filter filter,ISerializer serializer){
this.filter = filter;
this.serializer = serializer;
}
protected void applicaFiltro(Object source, String name, Object value, Class<?> classFilter){
try{
//System.out.println("EXCLUDE["+name+"] ID["+this.idBuilder.toID(source,name)+"]");
FilteredObject oggettoFiltrato = new FilteredObject();
// Identificatore unico risorsa
String id = null;
try{
if(this.idBuilder==null) {
throw new Exception("IDBuilder not initialized");
}
id = this.idBuilder.toID(source,name);
}catch(Exception e){
// id non esistente per l'oggetto source
return;
}
if(this.filter.existsFilteredObject(id)){
// La libreria di serializzazione invoca piu' volte il solito oggetto
return;
}
if(this.idBuilder!=null)
oggettoFiltrato.setId(id);
// Checksum risorsa filtrata
long checksum = -1;
byte[] byteOggetto = null;
if(value instanceof byte[]){
byteOggetto = (byte[])value;
}else{
// Uso serializzazione
byteOggetto = this.serializer.getObject(value).getBytes();
}
if(FilterChecksumTypes.ADLER.toString().equals(this.filter.getFilterChecksumType().toString())){
checksum = ChecksumAdler.checksumAdler32(byteOggetto);
}else{
checksum = ChecksumCRC.checksumCRC32(byteOggetto);
}
oggettoFiltrato.setChecksum(checksum);
// ClassType
oggettoFiltrato.setClassType(classFilter);
this.filter.addFilteredObject(oggettoFiltrato);
}catch(Exception e){
e.printStackTrace(System.out);
}
}
}