3131import alfio .model .extension .*;
3232import alfio .model .metadata .AlfioMetadata ;
3333import alfio .model .metadata .TicketMetadata ;
34+ import alfio .model .metadata .TicketMetadataContainer ;
3435import alfio .model .system .ConfigurationKeys ;
3536import alfio .model .user .Organization ;
3637import alfio .model .user .PublicUserProfile ;
6465@ Log4j2
6566public class ExtensionManager {
6667
68+ private static final String TICKET = "ticket" ;
69+ private static final String EVENT_METADATA = "eventMetadata" ;
70+ private static final String ORGANIZATION = "organization" ;
71+ private static final String RESERVATION = "reservation" ;
72+ private static final String BILLING_DETAILS = "billingDetails" ;
73+ private static final String ADDITIONAL_INFO = "additionalInfo" ;
74+ private static final String RESERVATIONS = "reservations" ;
75+ private static final String RESERVATION_IDS = "reservationIds" ;
76+ private static final String ORGANIZATION_ID = "organizationId" ;
77+ private static final String RESERVATION_ID = "reservationId" ;
78+ private static final String EVENT = "event" ;
6779 private final ExtensionService extensionService ;
6880 private final EventRepository eventRepository ;
6981 private final TicketReservationRepository ticketReservationRepository ;
@@ -96,16 +108,16 @@ void handleEventStatusChange(Event event, Event.Status status) {
96108 AlfioMetadata handleMetadataUpdate (Event event , Organization organization , AlfioMetadata metadata ) {
97109 Map <String , Object > payload = new HashMap <>();
98110 payload .put ("metadata" , metadata );
99- payload .put ("organization" , organization );
111+ payload .put (ORGANIZATION , organization );
100112 payload .put ("baseUrl" , configurationManager .getFor (ConfigurationKeys .BASE_URL , ConfigurationLevel .organization (organization .getId ())).getRequiredValue ());
101113 return syncCall (ExtensionEvent .EVENT_METADATA_UPDATE , event , payload , AlfioMetadata .class );
102114 }
103115
104116 void handleReservationConfirmation (TicketReservation reservation , BillingDetails billingDetails , PurchaseContext purchaseContext ) {
105117 Map <String , Object > payload = new HashMap <>();
106- payload .put ("reservation" , reservation );
107- payload .put ("billingDetails" , billingDetails );
108- payload .put ("additionalInfo" , Map .of ());
118+ payload .put (RESERVATION , reservation );
119+ payload .put (BILLING_DETAILS , billingDetails );
120+ payload .put (ADDITIONAL_INFO , Map .of ());
109121 transactionRepository .loadOptionalByReservationId (reservation .getId ())
110122 .ifPresent (tr -> payload .put ("transaction" , tr ));
111123 asyncCall (ExtensionEvent .RESERVATION_CONFIRMED ,
@@ -124,9 +136,9 @@ public void handleTicketAssignment(Ticket ticket,
124136 asyncCall (ExtensionEvent .TICKET_ASSIGNED ,
125137 event ,
126138 Map .of (
127- "ticket" , ticket ,
128- "additionalInfo" , additionalInfo ,
129- "eventMetadata" , eventRepository .getMetadataForEvent (event .getId ()),
139+ TICKET , ticket ,
140+ ADDITIONAL_INFO , additionalInfo ,
141+ EVENT_METADATA , eventRepository .getMetadataForEvent (event .getId ()),
130142 "onlineAccessTicket" , EventUtil .isAccessOnline (category , event )
131143 ));
132144 }
@@ -135,7 +147,7 @@ void handleWaitingQueueSubscription(WaitingQueueSubscription waitingQueueSubscri
135147 Event event = eventRepository .findById (waitingQueueSubscription .getEventId ());
136148 asyncCall (ExtensionEvent .WAITING_QUEUE_SUBSCRIBED ,
137149 event ,
138- Map .of ("waitingQueueSubscription" , waitingQueueSubscription , "additionalInfo" , Map .of ()));
150+ Map .of ("waitingQueueSubscription" , waitingQueueSubscription , ADDITIONAL_INFO , Map .of ()));
139151 }
140152
141153 void handleReservationsExpiredForEvent (PurchaseContext purchaseContext , Collection <String > reservationIdsToRemove ) {
@@ -149,25 +161,25 @@ void handleReservationsCancelledForEvent(PurchaseContext purchaseContext, Collec
149161 void handleTicketCancelledForEvent (Event event , Collection <String > ticketUUIDs ) {
150162 Map <String , Object > payload = new HashMap <>();
151163 payload .put ("ticketUUIDs" , ticketUUIDs );
152- payload .put ("eventMetadata" , eventRepository .getMetadataForEvent (event .getId ()));
164+ payload .put (EVENT_METADATA , eventRepository .getMetadataForEvent (event .getId ()));
153165 syncCall (ExtensionEvent .TICKET_CANCELLED , event , payload , Boolean .class );
154166 }
155167
156168 void handleOfflineReservationsWillExpire (Event event , List <TicketReservationInfo > reservations ) {
157169 Map <String , Object > payload = new HashMap <>();
158- payload .put ("reservations" , reservations );
170+ payload .put (RESERVATIONS , reservations );
159171 asyncCall (ExtensionEvent .OFFLINE_RESERVATIONS_WILL_EXPIRE , event , payload );
160172 }
161173
162174 void handleStuckReservations (Event event , List <String > stuckReservationsId ) {
163175 Map <String , Object > payload = new HashMap <>();
164- payload .put ("reservationIds" , stuckReservationsId );
176+ payload .put (RESERVATION_IDS , stuckReservationsId );
165177 asyncCall (ExtensionEvent .STUCK_RESERVATIONS , event , payload );
166178 }
167179
168180 Optional <CustomEmailText > handleReservationEmailCustomText (PurchaseContext purchaseContext , TicketReservation reservation , TicketReservationAdditionalInfo additionalInfo ) {
169181 Map <String , Object > payload = Map .of (
170- "reservation" , reservation ,
182+ RESERVATION , reservation ,
171183 "purchaseContext" , purchaseContext ,
172184 "billingData" , additionalInfo
173185 );
@@ -181,8 +193,8 @@ Optional<CustomEmailText> handleReservationEmailCustomText(PurchaseContext purch
181193
182194 public Optional <CustomEmailText > handleTicketEmailCustomText (Event event , TicketReservation reservation , TicketReservationAdditionalInfo additionalInfo , List <TicketFieldValue > fields ) {
183195 Map <String , Object > payload = Map .of (
184- "reservation" , reservation ,
185- "event" , event ,
196+ RESERVATION , reservation ,
197+ EVENT , event ,
186198 "billingData" , additionalInfo ,
187199 "additionalFields" , fields
188200 );
@@ -196,30 +208,30 @@ public Optional<CustomEmailText> handleTicketEmailCustomText(Event event, Ticket
196208
197209 private void handleReservationRemoval (PurchaseContext purchaseContext , Collection <String > reservationIds , ExtensionEvent extensionEvent ) {
198210 Map <String , Object > payload = new HashMap <>();
199- payload .put ("reservationIds" , reservationIds );
200- payload .put ("reservations" , ticketReservationRepository .findByIds (reservationIds ));
211+ payload .put (RESERVATION_IDS , reservationIds );
212+ payload .put (RESERVATIONS , ticketReservationRepository .findByIds (reservationIds ));
201213
202214 syncCall (extensionEvent , purchaseContext , payload , Boolean .class );
203215 }
204216
205217 public void handleCreditNoteGenerated (TicketReservation reservation , PurchaseContext purchaseContext , TotalPrice cost , Long billingDocumentId , Map <String , Object > contextData ) {
206218 Map <String , Object > payload = new HashMap <>(contextData );
207- payload .put ("reservationId" , reservation .getId ());
208- payload .put ("reservation" , reservation );
209- payload .put ("billingDetails" , ticketReservationRepository .getBillingDetailsForReservation (reservation .getId ()));
219+ payload .put (RESERVATION_ID , reservation .getId ());
220+ payload .put (RESERVATION , reservation );
221+ payload .put (BILLING_DETAILS , ticketReservationRepository .getBillingDetailsForReservation (reservation .getId ()));
210222 payload .put ("reservationCost" , cost );
211223 payload .put ("billingDocumentId" , billingDocumentId );
212224 asyncCall (ExtensionEvent .CREDIT_NOTE_GENERATED , purchaseContext , payload );
213225 }
214226
215227 public Optional <InvoiceGeneration > handleInvoiceGeneration (PaymentSpecification spec , TotalPrice reservationCost , BillingDetails billingDetails , Map <String , Object > contextData ) {
216228 Map <String , Object > payload = new HashMap <>(contextData );
217- payload .put ("reservationId" , spec .getReservationId ());
229+ payload .put (RESERVATION_ID , spec .getReservationId ());
218230 payload .put ("email" , spec .getEmail ());
219231 payload .put ("customerName" , spec .getCustomerName ());
220232 payload .put ("userLanguage" , spec .getLocale ().getLanguage ());
221233 payload .put ("billingAddress" , spec .getBillingAddress ());
222- payload .put ("billingDetails" , billingDetails );
234+ payload .put (BILLING_DETAILS , billingDetails );
223235 payload .put ("customerReference" , spec .getCustomerReference ());
224236 payload .put ("reservationCost" , reservationCost );
225237 payload .put ("invoiceRequested" , spec .isInvoiceRequested ());
@@ -235,9 +247,9 @@ public Optional<CreditNoteGeneration> handleCreditNoteGeneration(PurchaseContext
235247 String invoiceNumber ,
236248 Organization organization ) {
237249 return Optional .ofNullable (syncCall (ExtensionEvent .CREDIT_NOTE_GENERATION , purchaseContext , Map .of (
238- "reservationId" , reservationId ,
250+ RESERVATION_ID , reservationId ,
239251 "invoiceNumber" , invoiceNumber ,
240- "organization" , organization
252+ ORGANIZATION , organization
241253 ), CreditNoteGeneration .class ));
242254 }
243255
@@ -246,12 +258,12 @@ public Optional<String> handleOnlineCheckInLink(String originalUrl,
246258 EventWithCheckInInfo event ,
247259 Map <String , List <String >> additionalInfo ) {
248260 Map <String , Object > payload = new HashMap <>();
249- payload .put ("event" , event );
261+ payload .put (EVENT , event );
250262 payload .put ("eventId" , event .getId ());
251- payload .put ("organizationId" , event .getOrganizationId ());
252- payload .put ("ticket" , ticket );
263+ payload .put (ORGANIZATION_ID , event .getOrganizationId ());
264+ payload .put (TICKET , ticket );
253265 payload .put ("originalURL" , originalUrl );
254- payload .put ("additionalInfo" , Objects .requireNonNullElse (additionalInfo , Map .of ()));
266+ payload .put (ADDITIONAL_INFO , Objects .requireNonNullElse (additionalInfo , Map .of ()));
255267
256268 return Optional .ofNullable (extensionService .executeScriptsForEvent (ONLINE_CHECK_IN_REDIRECT .name (),
257269 toPath (event ),
@@ -269,21 +281,21 @@ boolean handleTaxIdValidation(PurchaseContext purchaseContext, String taxIdNumbe
269281 void handleTicketCheckedIn (Ticket ticket ) {
270282 Map <String , Object > payload = new HashMap <>();
271283 Event event = eventRepository .findById (ticket .getEventId ());
272- payload .put ("ticket" , ticket );
284+ payload .put (TICKET , ticket );
273285 asyncCall (ExtensionEvent .TICKET_CHECKED_IN , event , payload );
274286 }
275287
276288 void handleTicketRevertCheckedIn (Ticket ticket ) {
277289 Map <String , Object > payload = new HashMap <>();
278290 Event event = eventRepository .findById (ticket .getEventId ());
279- payload .put ("ticket" , ticket );
291+ payload .put (TICKET , ticket );
280292 asyncCall (ExtensionEvent .TICKET_REVERT_CHECKED_IN , event , payload );
281293 }
282294
283295 public void handleReservationValidation (PurchaseContext purchaseContext , TicketReservation reservation , Object clientForm , BindingResult bindingResult ) {
284296 Map <String , Object > payload = Map .of (
285- "reservationId" , reservation .getId (),
286- "reservation" , reservation ,
297+ RESERVATION_ID , reservation .getId (),
298+ RESERVATION , reservation ,
287299 "form" , clientForm ,
288300 "bindingResult" , bindingResult
289301 );
@@ -302,23 +314,23 @@ public void handleUserProfileValidation(Object clientForm, BindingResult binding
302314
303315 void handleEventHeaderUpdate (Event event , Organization organization ) {
304316 Map <String , Object > payload = Map .of (
305- "eventMetadata" , eventRepository .getMetadataForEvent (event .getId ()),
306- "organization" , organization
317+ EVENT_METADATA , eventRepository .getMetadataForEvent (event .getId ()),
318+ ORGANIZATION , organization
307319 );
308320 asyncCall (ExtensionEvent .EVENT_HEADER_UPDATED , event , payload );
309321 }
310322
311323 void handleReservationsCreditNoteIssuedForEvent (Event event , List <String > reservationIds ) {
312324 Map <String , Object > payload = new HashMap <>();
313- payload .put ("reservationIds" , reservationIds );
314- payload .put ("reservations" , ticketReservationRepository .findByIds (reservationIds ));
325+ payload .put (RESERVATION_IDS , reservationIds );
326+ payload .put (RESERVATIONS , ticketReservationRepository .findByIds (reservationIds ));
315327
316328 syncCall (ExtensionEvent .RESERVATION_CREDIT_NOTE_ISSUED , event , payload , Boolean .class );
317329 }
318330
319331 void handleRefund (PurchaseContext purchaseContext , TicketReservation reservation , TransactionAndPaymentInfo info ) {
320332 Map <String , Object > payload = new HashMap <>();
321- payload .put ("reservation" , reservation );
333+ payload .put (RESERVATION , reservation );
322334 payload .put ("transaction" , info .getTransaction ());
323335 payload .put ("paymentInfo" , info .getPaymentInformation ());
324336 asyncCall (ExtensionEvent .REFUND_ISSUED , purchaseContext , payload );
@@ -330,7 +342,7 @@ void handleRefund(PurchaseContext purchaseContext, TicketReservation reservation
330342 * @param purchaseContext the current Purchase Context
331343 * @param userAdditionalData user data to filter
332344 * @param userProfile existing user profile, may be null
333- * @return the keys to persist
345+ * @return the keys to persist, or {@code null}
334346 */
335347 public List <AdditionalInfoItem > filterAdditionalInfoToSave (PurchaseContext purchaseContext ,
336348 Map <String , List <String >> userAdditionalData ,
@@ -369,7 +381,7 @@ public Optional<String> generateOAuth2StateParam(int organizationId) {
369381 try {
370382 return Optional .ofNullable (extensionService .executeScriptsForEvent (ExtensionEvent .OAUTH2_STATE_GENERATION .name (),
371383 "-" + organizationId ,
372- Map .of ("baseUrl" , configurationManager .getFor (ConfigurationKeys .BASE_URL , ConfigurationLevel .organization (organizationId )).getRequiredValue (), "organizationId" , organizationId ),
384+ Map .of ("baseUrl" , configurationManager .getFor (ConfigurationKeys .BASE_URL , ConfigurationLevel .organization (organizationId )).getRequiredValue (), ORGANIZATION_ID , organizationId ),
373385 String .class ));
374386 } catch (Exception ex ) {
375387 log .error ("got exception while generating OAuth2 State Param" , ex );
@@ -381,7 +393,7 @@ public Optional<PromoCodeDiscount> handleDynamicDiscount(Event event, Map<Intege
381393 try {
382394 var values = new HashMap <String , Object >();
383395 values .put ("quantityByCategory" , quantityByCategory );
384- values .put ("reservationId" , reservationId );
396+ values .put (RESERVATION_ID , reservationId );
385397 var dynamicDiscountResult = syncCall (ExtensionEvent .DYNAMIC_DISCOUNT_APPLICATION , event ,
386398 values , DynamicDiscount .class );
387399 if (dynamicDiscountResult == null || dynamicDiscountResult .getDiscountType () == PromoCodeDiscount .DiscountType .NONE ) {
@@ -431,11 +443,11 @@ private Map<String, Object> fillWithBasicInfo(Map<String, ?> payload, PurchaseCo
431443 if (purchaseContext != null ) {
432444 //FIXME ugly
433445 purchaseContext .event ().ifPresent (event -> {
434- payloadCopy .put ("event" , event );
446+ payloadCopy .put (EVENT , event );
435447 payloadCopy .put ("eventId" , event .getId ());
436448 });
437449 payloadCopy .put ("purchaseContext" , purchaseContext );
438- payloadCopy .put ("organizationId" , purchaseContext .getOrganizationId ());
450+ payloadCopy .put (ORGANIZATION_ID , purchaseContext .getOrganizationId ());
439451 }
440452 return payloadCopy ;
441453 }
@@ -461,11 +473,11 @@ public void handlePublicUserDelete(OpenIdAlfioAuthentication authentication, Use
461473 public Optional <TicketMetadata > handleCustomOnlineJoinUrl (Event event ,
462474 Ticket ticket ,
463475 Map <String , List <String >> ticketAdditionalInfo ) {
464- var ticketMetadataContainer = ticketRepository .getTicketMetadata (ticket .getId ());
476+ var ticketMetadataContainer = Objects . requireNonNullElseGet ( ticketRepository .getTicketMetadata (ticket .getId ()), TicketMetadataContainer :: empty );
465477 var context = new HashMap <String , Object >();
466478 var key = ExtensionEvent .CUSTOM_ONLINE_JOIN_URL .name ();
467- context .put ("ticket" , ticket );
468- context .put ("additionalInfo" , ticketAdditionalInfo );
479+ context .put (TICKET , ticket );
480+ context .put (ADDITIONAL_INFO , ticketAdditionalInfo );
469481 var existingMetadata = ticketMetadataContainer .getMetadataForKey (key );
470482 existingMetadata .ifPresent (m -> context .put ("ticketMetadata" , m ));
471483 var result = Optional .ofNullable (syncCall (ExtensionEvent .CUSTOM_ONLINE_JOIN_URL , event , context , TicketMetadata .class , false ));
0 commit comments