CredenzialeSearchClientAddress.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.transazioni.utils.credenziali;

  21. import org.openspcoop2.core.transazioni.CredenzialeMittente;
  22. import org.openspcoop2.core.transazioni.dao.ICredenzialeMittenteService;
  23. import org.openspcoop2.core.transazioni.utils.TipoCredenzialeMittente;
  24. import org.openspcoop2.generic_project.exception.ExpressionException;
  25. import org.openspcoop2.generic_project.exception.ExpressionNotImplementedException;
  26. import org.openspcoop2.generic_project.exception.NotImplementedException;
  27. import org.openspcoop2.generic_project.exception.ServiceException;
  28. import org.openspcoop2.generic_project.expression.IPaginatedExpression;
  29. import org.openspcoop2.generic_project.expression.LikeMode;
  30. import org.openspcoop2.utils.UtilsException;

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

  39.     private boolean socketAddress;
  40.     private boolean trasportAddress;
  41.     private boolean andOperator;
  42.    
  43.     public CredenzialeSearchClientAddress(boolean socketAddress, boolean trasportAddress, boolean and) {
  44.         super(TipoCredenzialeMittente.CLIENT_ADDRESS);
  45.         this.socketAddress = socketAddress;
  46.         this.trasportAddress = trasportAddress;
  47.         this.andOperator = and;
  48.     }

  49.     @Override
  50.     protected String getExactValueDatabase(String credentialParam, boolean ricercaEsatta) throws UtilsException {
  51.         throw new UtilsException("Not Implemented"); // il metodo non viene usato poich' createExpression è ridefinito per questo tipo di classe
  52.     }
  53.    
  54.     @Override
  55.     public IPaginatedExpression createExpression(ICredenzialeMittenteService credenzialeMittentiService, String credentialParam, boolean ricercaEsatta, boolean caseSensitive) throws UtilsException {
  56.        
  57.         try {
  58.        
  59.             IPaginatedExpression pagExpression = credenzialeMittentiService.newPaginatedExpression();
  60.             pagExpression.and();
  61.            
  62.             String credentialSocket = this.convertToDBValue ? CredenzialeClientAddress.getSocketAddressDBValue(credentialParam, ricercaEsatta) : credentialParam;
  63.             String credentialTransport = this.convertToDBValue ? CredenzialeClientAddress.getTransportAddressDBValue(credentialParam, ricercaEsatta) : credentialParam;
  64.            
  65.             pagExpression.equals(CredenzialeMittente.model().TIPO, this.tipo.getRawValue());
  66.            
  67.             setLikeCondition(credenzialeMittentiService,
  68.                     pagExpression, ricercaEsatta, caseSensitive,
  69.                     credentialSocket, credentialTransport, credentialParam);
  70.        
  71.             return pagExpression;
  72.            
  73.         }catch(Exception e) {
  74.             throw new UtilsException(e.getMessage(), e);
  75.         }
  76.        
  77.     }
  78.    
  79.     private void setLikeCondition(ICredenzialeMittenteService credenzialeMittentiService,
  80.             IPaginatedExpression pagExpression, boolean ricercaEsatta, boolean caseSensitive,
  81.             String credentialSocket, String credentialTransport, String credentialParam) throws ExpressionNotImplementedException, ExpressionException, ServiceException, NotImplementedException {
  82.         if(ricercaEsatta) {
  83.             if(caseSensitive) {
  84.                 setLikeConditionRicercaEsattaCaseSensitive(credenzialeMittentiService,
  85.                         pagExpression,
  86.                         credentialSocket, credentialTransport);
  87.             }
  88.             else {
  89.                 setLikeConditionRicercaEsattaCaseInsensitive(credenzialeMittentiService,
  90.                         pagExpression,
  91.                         credentialSocket, credentialTransport);
  92.             }
  93.         }
  94.         else if(!caseSensitive) {
  95.             pagExpression.ilike(CredenzialeMittente.model().CREDENZIALE, credentialParam, LikeMode.ANYWHERE); // non si differenzia tra socket e transport
  96.         }
  97.         else { // !ricercaEsatta && caseSensitive
  98.             pagExpression.like(CredenzialeMittente.model().CREDENZIALE, credentialParam, LikeMode.ANYWHERE); // non si differenzia tra socket e transport
  99.         }
  100.     }
  101.    
  102.     private void setLikeConditionRicercaEsattaCaseSensitive(ICredenzialeMittenteService credenzialeMittentiService,
  103.             IPaginatedExpression pagExpression,
  104.             String credentialSocket, String credentialTransport) throws ExpressionNotImplementedException, ExpressionException, ServiceException, NotImplementedException {
  105.         if(this.socketAddress && this.trasportAddress) {
  106.             setLikeConditionRicercaEsattaCaseSensitiveBoth(credenzialeMittentiService,
  107.                     pagExpression,
  108.                     credentialSocket, credentialTransport);
  109.         }
  110.         else if(this.socketAddress) {
  111.             if(this.convertToDBValue) {
  112.                 pagExpression.like(CredenzialeMittente.model().CREDENZIALE, credentialSocket, LikeMode.ANYWHERE); // cmq devo usare anywhere, il valore è gia codificato per cercare il socket
  113.             }
  114.             else {
  115.                 pagExpression.equals(CredenzialeMittente.model().CREDENZIALE, credentialSocket);
  116.             }
  117.         }
  118.         else if(this.trasportAddress) {
  119.             if(this.convertToDBValue) {
  120.                 pagExpression.like(CredenzialeMittente.model().CREDENZIALE, credentialTransport, LikeMode.ANYWHERE); // cmq devo usare anywhere, il valore è gia codificato per cercare il trasporto
  121.             }
  122.             else {
  123.                 pagExpression.equals(CredenzialeMittente.model().CREDENZIALE, credentialTransport);
  124.             }
  125.         }
  126.     }
  127.     private void setLikeConditionRicercaEsattaCaseSensitiveBoth(ICredenzialeMittenteService credenzialeMittentiService,
  128.             IPaginatedExpression pagExpression,
  129.             String credentialSocket, String credentialTransport) throws ExpressionNotImplementedException, ExpressionException, ServiceException, NotImplementedException {
  130.         IPaginatedExpression pagExpressionSocket = credenzialeMittentiService.newPaginatedExpression();
  131.         if(this.convertToDBValue) {
  132.             pagExpressionSocket.like(CredenzialeMittente.model().CREDENZIALE, credentialSocket, LikeMode.ANYWHERE); // cmq devo usare anywhere, il valore è gia codificato per cercare il socket
  133.         }
  134.         else {
  135.             pagExpressionSocket.equals(CredenzialeMittente.model().CREDENZIALE, credentialSocket); // utilizzato da govway dove credentialSocket=credentialTransport
  136.         }
  137.        
  138.         IPaginatedExpression pagExpressionTransport = credenzialeMittentiService.newPaginatedExpression();
  139.         if(this.convertToDBValue) {
  140.             pagExpressionTransport.like(CredenzialeMittente.model().CREDENZIALE, credentialTransport, LikeMode.ANYWHERE); // cmq devo usare anywhere, il valore è gia codificato per cercare il trasporto
  141.         }
  142.         else {
  143.             pagExpressionTransport.equals(CredenzialeMittente.model().CREDENZIALE, credentialTransport); // utilizzato da govway dove credentialSocket=credentialTransport
  144.         }
  145.        
  146.         if(this.andOperator) {
  147.             pagExpression.and(pagExpressionSocket, pagExpressionTransport);
  148.         }
  149.         else {
  150.             pagExpression.or(pagExpressionSocket, pagExpressionTransport);
  151.         }
  152.     }
  153.    
  154.     private void setLikeConditionRicercaEsattaCaseInsensitive(ICredenzialeMittenteService credenzialeMittentiService,
  155.             IPaginatedExpression pagExpression,
  156.             String credentialSocket, String credentialTransport) throws ExpressionNotImplementedException, ExpressionException, ServiceException, NotImplementedException {
  157.         if(this.socketAddress && this.trasportAddress) {
  158.             setLikeConditionRicercaEsattaCaseInsensitiveBoth(credenzialeMittentiService,
  159.                     pagExpression,
  160.                     credentialSocket, credentialTransport);
  161.         }
  162.         else if(this.socketAddress) {
  163.             if(this.convertToDBValue) {
  164.                 pagExpression.ilike(CredenzialeMittente.model().CREDENZIALE, credentialSocket, LikeMode.ANYWHERE); // cmq devo usare anywhere, il valore è gia codificato per cercare il socket
  165.             }
  166.             else {
  167.                 pagExpression.ilike(CredenzialeMittente.model().CREDENZIALE, credentialSocket, LikeMode.EXACT);
  168.             }
  169.         }
  170.         else if(this.trasportAddress) {
  171.             if(this.convertToDBValue) {
  172.                 pagExpression.ilike(CredenzialeMittente.model().CREDENZIALE, credentialTransport, LikeMode.ANYWHERE); // cmq devo usare anywhere, il valore è gia codificato per cercare il trasporto
  173.             }
  174.             else {
  175.                 pagExpression.ilike(CredenzialeMittente.model().CREDENZIALE, credentialTransport, LikeMode.EXACT);
  176.             }
  177.         }
  178.     }
  179.     private void setLikeConditionRicercaEsattaCaseInsensitiveBoth(ICredenzialeMittenteService credenzialeMittentiService,
  180.             IPaginatedExpression pagExpression,
  181.             String credentialSocket, String credentialTransport) throws ExpressionNotImplementedException, ExpressionException, ServiceException, NotImplementedException {
  182.         IPaginatedExpression pagExpressionSocket = credenzialeMittentiService.newPaginatedExpression();
  183.         if(this.convertToDBValue) {
  184.             pagExpressionSocket.ilike(CredenzialeMittente.model().CREDENZIALE, credentialSocket, LikeMode.ANYWHERE); // cmq devo usare anywhere, il valore è gia codificato per cercare il socket
  185.         }
  186.         else {
  187.             pagExpressionSocket.ilike(CredenzialeMittente.model().CREDENZIALE, credentialSocket, LikeMode.EXACT); // utilizzato da govway dove credentialSocket=credentialTransport
  188.         }
  189.        
  190.         IPaginatedExpression pagExpressionTransport = credenzialeMittentiService.newPaginatedExpression();
  191.         if(this.convertToDBValue) {
  192.             pagExpressionTransport.ilike(CredenzialeMittente.model().CREDENZIALE, credentialTransport, LikeMode.ANYWHERE); // cmq devo usare anywhere, il valore è gia codificato per cercare il trasporto
  193.         }
  194.         else {
  195.             pagExpressionTransport.ilike(CredenzialeMittente.model().CREDENZIALE, credentialTransport, LikeMode.EXACT); // utilizzato da govway dove credentialSocket=credentialTransport
  196.         }
  197.            
  198.         if(this.andOperator) {
  199.             pagExpression.and(pagExpressionSocket, pagExpressionTransport);
  200.         }
  201.         else {
  202.             pagExpression.or(pagExpressionSocket, pagExpressionTransport);
  203.         }
  204.     }
  205. }