CredenzialeSearchTokenClient.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.  * CredenzialeSearchTokenClient
  33.  *
  34.  * @author Poli Andrea (poli@link.it)
  35.  * @author $Author$
  36.  * @version $Rev$, $Date$
  37.  */
  38. public class CredenzialeSearchTokenClient extends AbstractSearchCredenziale {

  39.     private boolean clientId;
  40.     private boolean application;
  41.     private boolean andOperator;
  42.    
  43.     public CredenzialeSearchTokenClient(boolean clientId, boolean application, boolean and) {
  44.         super(TipoCredenzialeMittente.TOKEN_CLIENT_ID);
  45.         this.clientId = clientId;
  46.         this.application = application;
  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.         try {
  57.            
  58.             IPaginatedExpression pagExpression = credenzialeMittentiService.newPaginatedExpression();
  59.             pagExpression.and();
  60.            
  61.             String credentialClientId = this.convertToDBValue ? CredenzialeTokenClient.getClientIdDBValue(credentialParam, ricercaEsatta) : credentialParam;
  62.             String credentialApplication = this.convertToDBValue ? CredenzialeTokenClient.getApplicationDBValue(credentialParam, ricercaEsatta) : credentialParam;
  63.            
  64.             pagExpression.equals(CredenzialeMittente.model().TIPO, this.tipo.getRawValue());
  65.            
  66.             if(ricercaEsatta) {
  67.                 if(caseSensitive) {
  68.                     setLikeConditionRicercaEsattaCaseSensitive(credenzialeMittentiService,
  69.                             pagExpression,
  70.                             credentialClientId, credentialApplication, credentialParam);
  71.                 }
  72.                 else {
  73.                     setLikeConditionRicercaEsattaCaseInsensitive(credenzialeMittentiService,
  74.                             pagExpression,
  75.                             credentialClientId, credentialApplication);
  76.                 }
  77.             }
  78.             else if(!caseSensitive) {
  79.                 pagExpression.ilike(CredenzialeMittente.model().CREDENZIALE, credentialParam, LikeMode.ANYWHERE); // non si differenzia tra socket e transport
  80.             }
  81.             else { // !ricercaEsatta && caseSensitive
  82.                 pagExpression.like(CredenzialeMittente.model().CREDENZIALE, credentialParam, LikeMode.ANYWHERE); // non si differenzia tra socket e transport
  83.             }
  84.        
  85.             return pagExpression;
  86.            
  87.         }catch(Exception e) {
  88.             throw new UtilsException(e.getMessage(), e);
  89.         }
  90.        
  91.     }
  92.    
  93.     private void setLikeConditionRicercaEsattaCaseSensitive(ICredenzialeMittenteService credenzialeMittentiService,
  94.             IPaginatedExpression pagExpression,
  95.             String credentialClientId, String credentialApplication, String credentialParam) throws ExpressionNotImplementedException, ExpressionException, ServiceException, NotImplementedException {
  96.         if(this.clientId && this.application) {
  97.             setLikeConditionRicercaEsattaCaseSensitiveBoth(credenzialeMittentiService,
  98.                     pagExpression,
  99.                     credentialClientId, credentialApplication);
  100.         }
  101.         else if(this.clientId) {
  102.             if(this.convertToDBValue) {
  103.                 IPaginatedExpression pagExpressionOr = credenzialeMittentiService.newPaginatedExpression();
  104.                 pagExpressionOr.like(CredenzialeMittente.model().CREDENZIALE, credentialClientId, LikeMode.ANYWHERE); // cmq devo usare anywhere, il valore è gia codificato per cercare il socket
  105.                 pagExpressionOr.or();
  106.                 pagExpressionOr.equals(CredenzialeMittente.model().CREDENZIALE, credentialParam); // per backward compatibility sulle transazioni create prima della gestione dell'applicativo
  107.                 pagExpression.and(pagExpressionOr);
  108.             }
  109.             else {
  110.                 pagExpression.equals(CredenzialeMittente.model().CREDENZIALE, credentialClientId);
  111.             }
  112.         }
  113.         else if(this.application) {
  114.             if(this.convertToDBValue) {
  115.                 pagExpression.like(CredenzialeMittente.model().CREDENZIALE, credentialApplication, LikeMode.ANYWHERE); // cmq devo usare anywhere, il valore è gia codificato per cercare il trasporto
  116.             }
  117.             else {
  118.                 pagExpression.equals(CredenzialeMittente.model().CREDENZIALE, credentialApplication);
  119.             }
  120.         }
  121.     }
  122.     private void setLikeConditionRicercaEsattaCaseSensitiveBoth(ICredenzialeMittenteService credenzialeMittentiService,
  123.             IPaginatedExpression pagExpression,
  124.             String credentialClientId, String credentialApplication) throws ExpressionNotImplementedException, ExpressionException, ServiceException, NotImplementedException {
  125.         IPaginatedExpression pagExpressionClientId = credenzialeMittentiService.newPaginatedExpression();
  126.         if(this.convertToDBValue) {
  127.             pagExpressionClientId.like(CredenzialeMittente.model().CREDENZIALE, credentialClientId, LikeMode.ANYWHERE); // cmq devo usare anywhere, il valore è gia codificato per cercare il socket
  128.         }
  129.         else {
  130.             pagExpressionClientId.equals(CredenzialeMittente.model().CREDENZIALE, credentialClientId); // utilizzato da govway dove credentialSocket=credentialTransport
  131.         }
  132.        
  133.         IPaginatedExpression pagExpressionApplication = credenzialeMittentiService.newPaginatedExpression();
  134.         if(this.convertToDBValue) {
  135.             pagExpressionApplication.like(CredenzialeMittente.model().CREDENZIALE, credentialApplication, LikeMode.ANYWHERE); // cmq devo usare anywhere, il valore è gia codificato per cercare il trasporto
  136.         }
  137.         else {
  138.             pagExpressionApplication.equals(CredenzialeMittente.model().CREDENZIALE, credentialApplication); // utilizzato da govway dove credentialSocket=credentialTransport
  139.         }
  140.        
  141.         if(this.andOperator) {
  142.             pagExpression.and(pagExpressionClientId, pagExpressionApplication);
  143.         }
  144.         else {
  145.             pagExpression.or(pagExpressionClientId, pagExpressionApplication);
  146.         }
  147.     }
  148.    
  149.     private void setLikeConditionRicercaEsattaCaseInsensitive(ICredenzialeMittenteService credenzialeMittentiService,
  150.             IPaginatedExpression pagExpression,
  151.             String credentialClientId, String credentialApplication) throws ExpressionNotImplementedException, ExpressionException, ServiceException, NotImplementedException {
  152.         if(this.clientId && this.application) {
  153.             setLikeConditionRicercaEsattaCaseInsensitiveBoth(credenzialeMittentiService,
  154.                     pagExpression,
  155.                     credentialClientId, credentialApplication);
  156.         }
  157.         else if(this.clientId) {
  158.             if(this.convertToDBValue) {
  159.                 pagExpression.ilike(CredenzialeMittente.model().CREDENZIALE, credentialClientId, LikeMode.ANYWHERE); // cmq devo usare anywhere, il valore è gia codificato per cercare il socket
  160.             }
  161.             else {
  162.                 pagExpression.ilike(CredenzialeMittente.model().CREDENZIALE, credentialClientId, LikeMode.EXACT);
  163.             }
  164.         }
  165.         else if(this.application) {
  166.             if(this.convertToDBValue) {
  167.                 pagExpression.ilike(CredenzialeMittente.model().CREDENZIALE, credentialApplication, LikeMode.ANYWHERE); // cmq devo usare anywhere, il valore è gia codificato per cercare il trasporto
  168.             }
  169.             else {
  170.                 pagExpression.ilike(CredenzialeMittente.model().CREDENZIALE, credentialApplication, LikeMode.EXACT);
  171.             }
  172.         }
  173.     }
  174.     private void setLikeConditionRicercaEsattaCaseInsensitiveBoth(ICredenzialeMittenteService credenzialeMittentiService,
  175.             IPaginatedExpression pagExpression,
  176.             String credentialClientId, String credentialApplication) throws ExpressionNotImplementedException, ExpressionException, ServiceException, NotImplementedException {
  177.         IPaginatedExpression pagExpressionClientId = credenzialeMittentiService.newPaginatedExpression();
  178.         if(this.convertToDBValue) {
  179.             pagExpressionClientId.ilike(CredenzialeMittente.model().CREDENZIALE, credentialClientId, LikeMode.ANYWHERE); // cmq devo usare anywhere, il valore è gia codificato per cercare il socket
  180.         }
  181.         else {
  182.             pagExpressionClientId.ilike(CredenzialeMittente.model().CREDENZIALE, credentialClientId, LikeMode.EXACT); // utilizzato da govway dove credentialSocket=credentialTransport
  183.         }
  184.        
  185.         IPaginatedExpression pagExpressionApplication = credenzialeMittentiService.newPaginatedExpression();
  186.         if(this.convertToDBValue) {
  187.             pagExpressionApplication.ilike(CredenzialeMittente.model().CREDENZIALE, credentialApplication, LikeMode.ANYWHERE); // cmq devo usare anywhere, il valore è gia codificato per cercare il trasporto
  188.         }
  189.         else {
  190.             pagExpressionApplication.ilike(CredenzialeMittente.model().CREDENZIALE, credentialApplication, LikeMode.EXACT); // utilizzato da govway dove credentialSocket=credentialTransport
  191.         }
  192.            
  193.         if(this.andOperator) {
  194.             pagExpression.and(pagExpressionClientId, pagExpressionApplication);
  195.         }
  196.         else {
  197.             pagExpression.or(pagExpressionClientId, pagExpressionApplication);
  198.         }
  199.     }
  200.    
  201. }