1 /*
2 * jDTAUS Banking RI DTAUS
3 * Copyright (C) 2005 Christian Schulte
4 * <cs@schulte.it>
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 */
21 package org.jdtaus.banking.dtaus.ri.zka;
22
23 import org.jdtaus.core.text.Message;
24 import org.jdtaus.core.text.Messages;
25
26 /**
27 * Thread-local collections of messages.
28 *
29 * @author <a href="mailto:cs@schulte.it">Christian Schulte</a>
30 * @version $JDTAUS: ThreadLocalMessages.java 8661 2012-09-27 11:29:58Z schulte $
31 */
32 public abstract class ThreadLocalMessages
33 {
34
35 /** Maximum number of messages added to the collection. */
36 private static final int MAXIMUM_MESSAGES = 100;
37
38 /** Thread local collections of messages. */
39 private static final ThreadLocal current = new ThreadLocal()
40 {
41
42 public Object initialValue()
43 {
44 return new Messages()
45 {
46
47 /** Number of messages added to the instance. */
48 private int messageCount = 0;
49
50 public void addMessage( final Message message )
51 {
52 if ( this.messageCount + 1L <= Integer.MAX_VALUE && this.messageCount + 1 < MAXIMUM_MESSAGES )
53 {
54 this.messageCount++;
55 super.addMessage( message );
56 }
57 }
58
59 public void removeMessage( final Message message )
60 {
61 if ( this.messageCount - 1 >= 0 )
62 {
63 this.messageCount--;
64 super.removeMessage( message );
65 }
66 }
67
68 public void clear()
69 {
70 this.messageCount = 0;
71 super.clear();
72 }
73
74 };
75 }
76
77 };
78
79 /** {@code ThreadLocal} {@code Boolean}. */
80 private static final ThreadLocal errorsEnabled = new ThreadLocal()
81 {
82
83 protected Object initialValue()
84 {
85 return Boolean.TRUE;
86 }
87
88 };
89
90 /**
91 * Flag indicating that {@code CorruptedException}s are enabled.
92 *
93 * @return {@code true} if a {@code CorruptedException} must be thrown whenever a file error is detected;
94 * {@code false} to not throw any exception when detecting a file error.
95 */
96 public static boolean isErrorsEnabled()
97 {
98 Boolean fatal = (Boolean) errorsEnabled.get();
99
100 if ( fatal == null )
101 {
102 throw new IllegalStateException();
103 }
104
105 return fatal.booleanValue();
106 }
107
108 /**
109 * Setter for property {@code errorsEnabled}.
110 *
111 * @param value {@code true} if a {@code CorruptedException} should be thrown whenever a file error is detected;
112 * {@code false} to not throw any exception when detecting a file error.
113 */
114 public static void setErrorsEnabled( final boolean value )
115 {
116 errorsEnabled.set( value ? Boolean.TRUE : Boolean.FALSE );
117 }
118
119 /**
120 * Gets the collection of messages stored with the current thread of execution.
121 *
122 * @return collection of messages stored with the current thread of execution.
123 */
124 public static Messages getMessages()
125 {
126 return (Messages) current.get();
127 }
128
129 }