OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libjava/] [classpath/] [java/] [util/] [logging/] [ErrorManager.java] - Blame information for rev 771

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 771 jeremybenn
/* ErrorManager.java --
2
   A class for dealing with errors that a Handler encounters
3
   during logging
4
   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
5
 
6
This file is part of GNU Classpath.
7
 
8
GNU Classpath is free software; you can redistribute it and/or modify
9
it under the terms of the GNU General Public License as published by
10
the Free Software Foundation; either version 2, or (at your option)
11
any later version.
12
 
13
GNU Classpath is distributed in the hope that it will be useful, but
14
WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16
General Public License for more details.
17
 
18
You should have received a copy of the GNU General Public License
19
along with GNU Classpath; see the file COPYING.  If not, write to the
20
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21
02110-1301 USA.
22
 
23
Linking this library statically or dynamically with other modules is
24
making a combined work based on this library.  Thus, the terms and
25
conditions of the GNU General Public License cover the whole
26
combination.
27
 
28
As a special exception, the copyright holders of this library give you
29
permission to link this library with independent modules to produce an
30
executable, regardless of the license terms of these independent
31
modules, and to copy and distribute the resulting executable under
32
terms of your choice, provided that you also meet, for each linked
33
independent module, the terms and conditions of the license of that
34
module.  An independent module is a module which is not derived from
35
or based on this library.  If you modify this library, you may extend
36
this exception to your version of the library, but you are not
37
obligated to do so.  If you do not wish to do so, delete this
38
exception statement from your version. */
39
 
40
 
41
package java.util.logging;
42
 
43
/**
44
 * An <code>ErrorManager</code> deals with errors that a <code>Handler</code>
45
 * encounters while logging.
46
 *
47
 * @see Handler#setErrorManager(ErrorManager)
48
 *
49
 * @author Sascha Brawer (brawer@acm.org)
50
 */
51
public class ErrorManager
52
{
53
  /* The values have been taken from Sun's public J2SE 1.4 API
54
   * documentation.
55
   * See http://java.sun.com/j2se/1.4/docs/api/constant-values.html
56
   */
57
 
58
  /**
59
   * Indicates that there was a failure that does not readily
60
   * fall into any of the other categories.
61
   */
62
  public static final int GENERIC_FAILURE = 0;
63
 
64
 
65
  /**
66
   * Indicates that there was a problem upon writing to
67
   * an output stream.
68
   */
69
  public static final int WRITE_FAILURE = 1;
70
 
71
 
72
  /**
73
   * Indicates that there was a problem upon flushing
74
   * an output stream.
75
   */
76
  public static final int FLUSH_FAILURE = 2;
77
 
78
 
79
  /**
80
   * Indicates that there was a problem upon closing
81
   * an output stream.
82
   */
83
  public static final int CLOSE_FAILURE = 3;
84
 
85
 
86
  /**
87
   * Indicates that there was a problem upon opening
88
   * an output stream.
89
   */
90
  public static final int OPEN_FAILURE = 4;
91
 
92
 
93
  /**
94
   * Indicates that there was a problem upon formatting
95
   * the message of a log record.
96
   */
97
  public static final int FORMAT_FAILURE = 5;
98
 
99
 
100
  /**
101
   * Indicates whether the {@link #error} method of this ErrorManager
102
   * has ever been used.
103
   *
104
   * Declared volatile in order to correctly support the
105
   * double-checked locking idiom (once the revised Java Memory Model
106
   * gets adopted); see Classpath bug #2944.
107
   */
108
  private volatile boolean everUsed = false;
109
 
110
 
111
  public ErrorManager()
112
  {
113
  }
114
 
115
 
116
  /**
117
   * Reports an error that occured upon logging.  The default implementation
118
   * emits the very first error to System.err, ignoring subsequent errors.
119
   *
120
   * @param message a message describing the error, or <code>null</code> if
121
   *                there is no suitable description.
122
   *
123
   * @param ex      an exception, or <code>null</code> if the error is not
124
   *                related to an exception.
125
   *
126
   * @param errorCode  one of the defined error codes, for example
127
   *                   <code>ErrorManager.CLOSE_FAILURE</code>.
128
   */
129
  public void error(String message, Exception ex, int errorCode)
130
  {
131
    if (everUsed)
132
      return;
133
 
134
    synchronized (this)
135
    {
136
      /* The double check is intentional. If the first check was
137
       * omitted, the monitor would have to be entered every time
138
       * error() method was called. If the second check was
139
       * omitted, the code below could be executed by multiple
140
       * threads simultaneously.
141
       *
142
       * This is the 'double-checked locking' idiom, which is broken
143
       * with the current version of the Java memory model.  However,
144
       * we assume that JVMs will have adopted a revised version of
145
       * the Java Memory Model by the time GNU Classpath gains
146
       * widespread acceptance. See Classpath bug #2944.
147
       */
148
      if (everUsed)
149
        return;
150
 
151
      everUsed = true;
152
    }
153
 
154
    String codeMsg;
155
    switch (errorCode)
156
    {
157
    case GENERIC_FAILURE:
158
      codeMsg = "GENERIC_FAILURE";
159
      break;
160
 
161
    case WRITE_FAILURE:
162
      codeMsg = "WRITE_FAILURE";
163
      break;
164
 
165
    case FLUSH_FAILURE:
166
      codeMsg = "FLUSH_FAILURE";
167
      break;
168
 
169
    case CLOSE_FAILURE:
170
      codeMsg = "CLOSE_FAILURE";
171
      break;
172
 
173
    case OPEN_FAILURE:
174
      codeMsg = "OPEN_FAILURE";
175
      break;
176
 
177
    case FORMAT_FAILURE:
178
      codeMsg = "FORMAT_FAILURE";
179
      break;
180
 
181
    default:
182
      codeMsg = String.valueOf(errorCode);
183
      break;
184
    }
185
 
186
    System.err.println("Error upon logging: " + codeMsg);
187
    if ((message != null) && (message.length() > 0))
188
      System.err.println(message);
189
 
190
    if (ex != null)
191
      ex.printStackTrace();
192
  }
193
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.