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.service.listeners;
35
36 import fr.paris.lutece.plugins.identitystore.business.identity.Identity;
37 import fr.paris.lutece.plugins.identitystore.service.AttributeChangeListener;
38 import fr.paris.lutece.plugins.identitystore.service.IdentityChangeListener;
39 import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.common.AttributeStatus;
40 import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.common.RequestAuthor;
41 import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.history.AttributeChangeType;
42 import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.history.IdentityChangeType;
43 import fr.paris.lutece.portal.service.spring.SpringContextService;
44 import fr.paris.lutece.portal.service.util.AppLogService;
45 import fr.paris.lutece.portal.service.util.AppPropertiesService;
46
47 import java.util.List;
48 import java.util.Map;
49 import java.util.concurrent.ExecutorService;
50 import java.util.concurrent.Executors;
51
52
53
54
55 public final class IdentityStoreNotifyListenerService
56 {
57
58 private static IdentityStoreNotifyListenerService _singleton;
59
60
61 private final List<AttributeChangeListener> _attributeChangelistListeners;
62 private final List<IdentityChangeListener> _identityChangeListListeners;
63
64 private final Integer poolSize = AppPropertiesService.getPropertyInt( "identitystore.listener.pool.size", 3 );
65
66 private final ExecutorService attributeExecutor = Executors.newFixedThreadPool( poolSize );
67 private final ExecutorService identityExecutor = Executors.newFixedThreadPool( poolSize );
68
69
70
71
72 private IdentityStoreNotifyListenerService( )
73 {
74
75 _attributeChangelistListeners = SpringContextService.getBeansOfType( AttributeChangeListener.class );
76
77 StringBuilder sbLog = new StringBuilder( );
78 sbLog.append( "IdentityStore - loading listeners : " );
79
80 for ( final AttributeChangeListener listener : _attributeChangelistListeners )
81 {
82 sbLog.append( "\n\t\t\t\t - " ).append( listener.getName( ) );
83 }
84
85 AppLogService.debug( sbLog.toString( ) );
86
87
88 _identityChangeListListeners = SpringContextService.getBeansOfType( IdentityChangeListener.class );
89
90 sbLog = new StringBuilder( );
91 sbLog.append( "IdentityStore - loading listeners : " );
92
93 for ( final IdentityChangeListener listener : _identityChangeListListeners )
94 {
95 sbLog.append( "\n\t\t\t\t - " ).append( listener.getName( ) );
96 }
97
98 AppLogService.debug( sbLog.toString( ) );
99
100 }
101
102
103
104
105
106
107 public static IdentityStoreNotifyListenerService instance( )
108 {
109 if ( _singleton == null )
110 {
111 _singleton = new IdentityStoreNotifyListenerService( );
112 }
113 return _singleton;
114 }
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130 public void notifyListenersAttributeChange( AttributeChangeType changeType, Identity identity, AttributeStatus attributeStatus, RequestAuthor author,
131 String clientCode )
132 {
133 _attributeChangelistListeners.stream( ).<Runnable> map( listener -> ( ) -> {
134 try
135 {
136 listener.processAttributeChange( changeType, identity, attributeStatus, author, clientCode );
137 }
138 catch( Exception e )
139 {
140 AppLogService.error( "An error occurred when notifying listener " + listener.getName( ) + " : " + e.getMessage( ) );
141 }
142 } ).forEach( attributeExecutor::submit );
143 }
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163 public void notifyListenersIdentityChange( IdentityChangeType identityChangeType, Identity identity, String statusCode, String statusMessage,
164 RequestAuthor author, String clientCode, Map<String, String> metadata )
165 {
166 _identityChangeListListeners.stream( ).<Runnable> map( listener -> ( ) -> {
167 try
168 {
169 listener.processIdentityChange( identityChangeType, identity, statusCode, statusMessage, author, clientCode, metadata );
170 }
171 catch( Exception e )
172 {
173 AppLogService.error( "An error occurred when notifying listener " + listener.getName( ) + " : " + e.getMessage( ) );
174 }
175 } ).forEach( identityExecutor::submit );
176 }
177
178 }