@@ -23,44 +23,85 @@ This file is part of the iText (R) project.
23
23
package com .itextpdf .commons .actions .processors ;
24
24
25
25
import com .itextpdf .commons .actions .AbstractProductProcessITextEvent ;
26
- import com .itextpdf .commons .exceptions .CommonsExceptionMessageConstant ;
26
+ import com .itextpdf .commons .actions .confirmations .ConfirmEvent ;
27
+ import com .itextpdf .commons .utils .Base64 ;
28
+
29
+ import java .nio .charset .StandardCharsets ;
30
+ import java .util .concurrent .atomic .AtomicLong ;
31
+ import org .slf4j .Logger ;
32
+ import org .slf4j .LoggerFactory ;
27
33
28
34
/**
29
35
* Defines a default strategy of product event processing.
30
36
*/
31
- public class DefaultITextProductEventProcessor implements ITextProductEventProcessor {
37
+ public class DefaultITextProductEventProcessor extends AbstractITextProductEventProcessor {
38
+
39
+ private static final Logger LOGGER = LoggerFactory .getLogger (DefaultITextProductEventProcessor .class );
40
+
41
+ private static final byte [] messageForLogging = Base64
42
+ .decode ("WW91IGFyZSB1c2luZyBpVGV4dCB1bmRlciB0aGUgQUdQTC4KCklmIHRoaXMgaXMgeW9"
43
+ + "1ciBpbnRlbnRpb24sIHlvdSBoYXZlIHB1Ymxpc2hlZCB5b3VyIG93biBzb3VyY2UgY2"
44
+ + "9kZSBhcyBBR1BMIHNvZnR3YXJlIHRvby4KUGxlYXNlIGxldCB1cyBrbm93IHdoZXJlI"
45
+ + "HRvIGZpbmQgeW91ciBzb3VyY2UgY29kZSBieSBzZW5kaW5nIGEgbWFpbCB0byBhZ3Bs"
46
+ + "QGl0ZXh0cGRmLmNvbQpXZSdkIGJlIGhvbm9yZWQgdG8gYWRkIGl0IHRvIG91ciBsaXN"
47
+ + "0IG9mIEFHUEwgcHJvamVjdHMgYnVpbHQgb24gdG9wIG9mIGlUZXh0IDcKYW5kIHdlJ2"
48
+ + "xsIGV4cGxhaW4gaG93IHRvIHJlbW92ZSB0aGlzIG1lc3NhZ2UgZnJvbSB5b3VyIGVyc"
49
+ + "m9yIGxvZ3MuCgpJZiB0aGlzIHdhc24ndCB5b3VyIGludGVudGlvbiwgeW91IGFyZSBw"
50
+ + "cm9iYWJseSB1c2luZyBpVGV4dCBpbiBhIG5vbi1mcmVlIGVudmlyb25tZW50LgpJbiB"
51
+ + "0aGlzIGNhc2UsIHBsZWFzZSBjb250YWN0IHVzIGJ5IGZpbGxpbmcgb3V0IHRoaXMgZm"
52
+ + "9ybTogaHR0cDovL2l0ZXh0cGRmLmNvbS9zYWxlcwpJZiB5b3UgYXJlIGEgY3VzdG9tZ"
53
+ + "XIsIHdlJ2xsIGV4cGxhaW4gaG93IHRvIGluc3RhbGwgeW91ciBsaWNlbnNlIGtleSB0"
54
+ + "byBhdm9pZCB0aGlzIG1lc3NhZ2UuCklmIHlvdSdyZSBub3QgYSBjdXN0b21lciwgd2U"
55
+ + "nbGwgZXhwbGFpbiB0aGUgYmVuZWZpdHMgb2YgYmVjb21pbmcgYSBjdXN0b21lci4=" );
56
+
57
+ private static final long [] REPEAT = {10000L , 5000L , 1000L };
58
+
59
+ private static final int MAX_LVL = REPEAT .length - 1 ;
32
60
33
- private final String productName ;
61
+ private final Object lock = new Object ();
62
+
63
+ private final AtomicLong counter = new AtomicLong (0 );
64
+
65
+ private final AtomicLong level = new AtomicLong (0 );
66
+
67
+ private final AtomicLong repeatLevel ;
34
68
35
69
/**
36
70
* Creates an instance of product event processor.
37
71
*
38
72
* @param productName is a product name
39
73
*/
40
74
public DefaultITextProductEventProcessor (String productName ) {
41
- if (productName == null ) {
42
- throw new IllegalArgumentException (CommonsExceptionMessageConstant .PRODUCT_NAME_CAN_NOT_BE_NULL );
43
- }
44
- this .productName = productName ;
75
+ super (productName );
76
+ repeatLevel = new AtomicLong (REPEAT [(int ) level .get ()]);
45
77
}
46
78
47
79
@ Override
48
80
public void onEvent (AbstractProductProcessITextEvent event ) {
49
- // TODO: DEVSIX-5341 provide appropriate logic if any
50
- }
81
+ if (!(event instanceof ConfirmEvent )) {
82
+ return ;
83
+ }
84
+ boolean isNeededToLogMessage = false ;
85
+ synchronized (lock ) {
86
+ if (counter .incrementAndGet () > repeatLevel .get ()) {
87
+ counter .set (0 );
88
+ if (level .incrementAndGet () > MAX_LVL ) {
89
+ level .set (MAX_LVL );
90
+ }
91
+ repeatLevel .set (REPEAT [(int ) level .get ()]);
92
+ isNeededToLogMessage = true ;
93
+ }
94
+ }
51
95
52
- @ Override
53
- public String getProductName () {
54
- return productName ;
96
+ if (isNeededToLogMessage ) {
97
+ String message = new String (messageForLogging , StandardCharsets .ISO_8859_1 );
98
+ LOGGER .info (message );
99
+ System .out .println (message );
100
+ }
55
101
}
56
102
57
103
@ Override
58
104
public String getUsageType () {
59
105
return "AGPL" ;
60
106
}
61
-
62
- @ Override
63
- public String getProducer () {
64
- return "iText\u00ae ${usedProducts:P V (T 'version')} \u00a9 ${copyrightSince}-${copyrightTo} iText Group NV" ;
65
- }
66
107
}
0 commit comments