1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  package fr.paris.lutece.plugins.identitystore.cache;
35  
36  import fr.paris.lutece.plugins.identitystore.business.attribute.AttributeKey;
37  import fr.paris.lutece.plugins.identitystore.business.attribute.AttributeKeyHome;
38  import fr.paris.lutece.plugins.identitystore.v3.web.rs.util.Constants;
39  import fr.paris.lutece.plugins.identitystore.web.exception.ResourceNotFoundException;
40  import fr.paris.lutece.portal.service.cache.AbstractCacheableService;
41  import fr.paris.lutece.portal.service.util.AppLogService;
42  
43  import java.util.regex.Pattern;
44  
45  public class IdentityAttributeValidationCache extends AbstractCacheableService
46  {
47      public static final String SERVICE_NAME = "IdentityAttributeValidationCache";
48  
49      public IdentityAttributeValidationCache( )
50      {
51          this.initCache( );
52      }
53  
54      public void refresh( )
55      {
56          AppLogService.debug( "Init Attribute Validation cache" );
57          this.resetCache( );
58          AttributeKeyHome.getAttributeKeysList( false )
59                  .forEach( attributeKey -> this.put( attributeKey.getKeyName( ), Pattern.compile( attributeKey.getValidationRegex( ) ) ) );
60      }
61  
62      public void put( final String keyName, final Pattern validationPattern )
63      {
64          if ( this.getKeys( ).contains( keyName ) )
65          {
66              this.removeKey( keyName );
67          }
68          this.putInCache( keyName, validationPattern );
69          AppLogService.debug( "Validation Pattern added to cache: " + keyName );
70      }
71  
72      public void remove( final String keyName )
73      {
74          if ( this.getKeys( ).contains( keyName ) )
75          {
76              this.removeKey( keyName );
77          }
78  
79          AppLogService.debug( "Validation Pattern removed from cache: " + keyName );
80      }
81  
82      public Pattern get( final String keyName ) throws ResourceNotFoundException
83      {
84          Pattern validationPattern = (Pattern) this.getFromCache( keyName );
85          if ( validationPattern == null )
86          {
87              validationPattern = this.getFromDatabase( keyName );
88              this.put( keyName, validationPattern );
89          }
90          return validationPattern;
91      }
92  
93      public Pattern getFromDatabase( final String keyName ) throws ResourceNotFoundException
94      {
95          final AttributeKey attributeKey = AttributeKeyHome.findByKey( keyName, false );
96          if ( attributeKey == null )
97          {
98              throw new ResourceNotFoundException( "No attribute key could be found with key " + keyName, Constants.PROPERTY_REST_ERROR_UNKNOWN_ATTRIBUTE_KEY );
99          }
100         return Pattern.compile( attributeKey.getValidationRegex( ) );
101     }
102 
103     @Override
104     public String getName( )
105     {
106         return SERVICE_NAME;
107     }
108 }