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.ArrayList;
44 import java.util.List;
45
46 public class AttributeKeyCache extends AbstractCacheableService
47 {
48 public static final String SERVICE_NAME = "AttributeKeyCache";
49
50 public AttributeKeyCache( )
51 {
52 this.initCache( );
53 }
54
55 public void refresh( )
56 {
57 AppLogService.debug( "Init AttributeKey cache" );
58 this.resetCache( );
59 AttributeKeyHome.getAttributeKeysList( true ).forEach( attributeKey -> this.put( attributeKey.getKeyName( ), attributeKey ) );
60 }
61
62 public void put( final String keyName, final AttributeKey attributeKey )
63 {
64 if ( this.getKeys( ).contains( keyName ) )
65 {
66 this.removeKey( keyName );
67 }
68 this.putInCache( keyName, attributeKey );
69 AppLogService.debug( "AttributeKey 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( "AttributeKey removed from cache: " + keyName );
80 }
81
82 public List<AttributeKey> getAll( )
83 {
84 final List<AttributeKey> allAttributeKeys = new ArrayList<>( );
85 if ( this.getKeys( ).isEmpty( ) )
86 {
87 this.refresh( );
88 }
89 for ( final String key : this.getKeys( ) )
90 {
91 try
92 {
93 allAttributeKeys.add( this.get( key ) );
94 }
95 catch( final ResourceNotFoundException e )
96 {
97
98 }
99 }
100
101 if ( allAttributeKeys.isEmpty( ) )
102 {
103 allAttributeKeys.addAll( AttributeKeyHome.getAttributeKeysList( true ) );
104 }
105 return allAttributeKeys;
106 }
107
108 public AttributeKey get( final String keyName ) throws ResourceNotFoundException
109 {
110 AttributeKey../../fr/paris/lutece/plugins/identitystore/business/attribute/AttributeKey.html#AttributeKey">AttributeKey attributeKey = (AttributeKey) this.getFromCache( keyName );
111 if ( attributeKey == null )
112 {
113 attributeKey = this.getFromDatabase( keyName );
114 this.put( keyName, attributeKey );
115 }
116 return attributeKey;
117 }
118
119 public AttributeKey getFromDatabase( final String keyName ) throws ResourceNotFoundException
120 {
121 final AttributeKey attributeKey = AttributeKeyHome.findByKey( keyName, true );
122 if ( attributeKey == null )
123 {
124 throw new ResourceNotFoundException( "No attribute key could be found with key " + keyName, Constants.PROPERTY_REST_ERROR_UNKNOWN_ATTRIBUTE_KEY );
125 }
126 return attributeKey;
127 }
128
129 @Override
130 public String getName( )
131 {
132 return SERVICE_NAME;
133 }
134 }