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 }