001/*- 002 * #%L 003 * Smile CDR - CDR 004 * %% 005 * Copyright (C) 2016 - 2026 Smile CDR, Inc. 006 * %% 007 * All rights reserved. 008 * #L% 009 */ 010package ca.cdr.api.transactionlog; 011 012import java.util.Collections; 013import java.util.List; 014 015/** 016 * Provides configured settings for the transaction log services. Sources of transaction log events 017 * can use this to determine whether to include specific elements in their transaction log entries 018 * for optimization purposes. 019 */ 020public interface ITransactionLogCommonSettings { 021 022 boolean isPersistStorageOutcomeDetails(); 023 024 /** 025 * Returns the list of request header names to capture in transaction logs. 026 */ 027 default List<String> getRequestHeadersToStore() { 028 return Collections.emptyList(); 029 } 030 031 /** 032 * Returns the list of response header names to capture in transaction logs. 033 */ 034 default List<String> getResponseHeadersToStore() { 035 return Collections.emptyList(); 036 } 037 038 static ITransactionLogCommonSettings composite(List<ITransactionLogCommonSettings> theSettings) { 039 return new CompositeSettings(theSettings); 040 } 041 042 class CompositeSettings implements ITransactionLogCommonSettings { 043 044 private final boolean myPersistStorageOutcomeDetails; 045 private final List<String> myRequestHeadersToStore; 046 private final List<String> myResponseHeadersToStore; 047 048 public CompositeSettings(List<ITransactionLogCommonSettings> theSettingsList) { 049 boolean persistStorageOutcomeDetails = false; 050 List<String> requestHeaders = Collections.emptyList(); 051 List<String> responseHeaders = Collections.emptyList(); 052 for (ITransactionLogCommonSettings settings : theSettingsList) { 053 persistStorageOutcomeDetails |= settings.isPersistStorageOutcomeDetails(); 054 if (requestHeaders.isEmpty()) { 055 requestHeaders = settings.getRequestHeadersToStore(); 056 } 057 if (responseHeaders.isEmpty()) { 058 responseHeaders = settings.getResponseHeadersToStore(); 059 } 060 } 061 myPersistStorageOutcomeDetails = persistStorageOutcomeDetails; 062 myRequestHeadersToStore = requestHeaders; 063 myResponseHeadersToStore = responseHeaders; 064 } 065 066 @Override 067 public boolean isPersistStorageOutcomeDetails() { 068 return myPersistStorageOutcomeDetails; 069 } 070 071 @Override 072 public List<String> getRequestHeadersToStore() { 073 return myRequestHeadersToStore; 074 } 075 076 @Override 077 public List<String> getResponseHeadersToStore() { 078 return myResponseHeadersToStore; 079 } 080 } 081}