1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
|
/*
* $Id$
* Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
* For details on use and redistribution please refer to the
* LICENSE file included with these sources.
*/
package org.apache.fop.viewer;
import java.awt.*;
import java.io.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.JComponent.*;
/**
* Klasse <code>UserMessage</code> ist ein utility zum Abfragen oder zum Informieren des Benutzers.<br>
* Eine Meldung besteht aus dem Identifikator (Suchschl�ssel im Meldungspool), einem Dialogtitel, einem Buttonset und
* dem Meldungstext mit eventuellen Platzhaltern f�r die Parameter.
*
* @author S. Gorkhover
* @version 18.03.1999
*
* @changed 23.04.99 Juergen.Verwohlt@jCatalog.com
* @subject Weitere Ausgabemethoden: show(String, String) und show(String,String,Frame)
*
* @changed 28.05.99 Juergen.Verwohlt@jCatalog.com
* @subject MessageException unterst�tzen
*
* @changed 09.06.99 Juergen.Verwohlt@jCatalog.com
* @subject Neue Klasse MessagesException zur Anzeige verwenden
*
* @changed 10.12.00 gears@apache.org
* @subject Unicode
*/
public class UserMessage {
private static Translator res = null;
public static void setTranslator(Translator aRes) {
res = aRes;
if (res == null) {
//log.debug("UserMessage: setTranslator(null) !");
res = new SecureResourceBundle(null);
}
MessagesDialog.setTranslator(res);
}
// Zul�ssige Werte f�r Dialogart:
/**
* M�glicher Wert des Meldungstypes. Fenster-Title "Info" (de).
*/
private static final int INFO = JOptionPane.PLAIN_MESSAGE;
/**
* M�glicher Wert des Meldungstypes. Fenster-Title "Warnung" (de).
*/
private static final int WARNING = JOptionPane.WARNING_MESSAGE;
/**
* M�glicher Wert des Meldungstypes. Fenster-Title "Frage" (de).
*/
private static final int QUESTION = JOptionPane.QUESTION_MESSAGE;
/**
* M�glicher Wert des Meldungstypes. Fenster-Title "Fehler" (de).
*/
private static final int ERROR = JOptionPane.ERROR_MESSAGE;
/**
* M�glicher Wert des Meldungstypes. Fenster-Title "Systemfehler" (de).
*/
private static final int SYS_ERROR = JOptionPane.ERROR_MESSAGE;
/*
* Style Constanten orientieren sich auf die
* Constanten der ButtonDialog-Klasse und legen das Dialog-ButtonSet fest.
*/
/**
* Wert f�r Setzten keines Buttons
*/
public static final int STYLE_NOBUTTON = -2;
/**
* Wert f�r Setzten von nur Ja-Button.
*/
public static final int STYLE_Y = JOptionPane.DEFAULT_OPTION;
// ButtonDialog.YES; // = 1
/**
* Wert f�r Setzten von Ja- und Nein-Buttons.
*/
public static final int STYLE_Y_N = JOptionPane.YES_NO_OPTION;
// ButtonDialog.YES_NO; // = 2;
/**
* Wert f�r Setzten von Ja-, Nein-und Abbruch Buttons.
*/
public static final int STYLE_Y_N_C = JOptionPane.YES_NO_CANCEL_OPTION;
// ButtonDialog.YES_NO_CANCEL; // = 3;
// Platzhalter f�r Parameter in der Properties-Datei
private static final String PARAMETER_TAG = "&&&";
/**
* Benutzer-Antwort-Constanten orientieren sich auf die
* Constanten der ButtonDialog-Klasse
*/
/**
* M�glicher R�ckgabewert @see ButtonDialog
*/
public static final int YES = JOptionPane.YES_OPTION;
// ButtonDialog.YES; // = 2
/**
* M�glicher R�ckgabewert @see ButtonDialog
*/
public static final int NO = JOptionPane.NO_OPTION;
// ButtonDialog.NO; // = 4;
/**
* M�glicher R�ckgabewert @see ButtonDialog
*/
public static final int CANCEL = JOptionPane.CANCEL_OPTION;
// ButtonDialog.CANCEL; // = 8;
// Default-Values
private static int buttonType = STYLE_Y;
private static int iconType = WARNING;
private static String currentIconName = "";
private static String actMessId = null;
// private static MessagesDialog nobuttonDialog = null;
/**
* Ersetzt die eventuellen Platzhalter durch die �bergebenen Parameter
*/
static String prepareMessage(String rawText, String[] par) {
//log.debug("prepareMessage(): " + rawText + ", parameter: "
// + par);
int index = rawText.indexOf(PARAMETER_TAG);
String composedMess = "";
if ((index == -1) && (par == null))
return rawText;
if ((index != -1) && (par == null)) {
//log.debug("Message " + actMessId
// + " erwartet Parameter. Aufgerufen ohne Parameter");
return rawText;
}
if ((index == -1) && (par != null)) {
//log.debug("Message " + actMessId
// + " erwartet keine Parameter. Aufgerufen mit folgenden Parametern:");
for (int i = 0; i < par.length; ++i) {
//log.debug(par[i].toString());
}
return rawText;
}
int tagCount = 0;
while (rawText.indexOf(PARAMETER_TAG) != -1) {
index = rawText.indexOf(PARAMETER_TAG);
try {
composedMess += rawText.substring(0, index) + par[tagCount];
} catch (ArrayIndexOutOfBoundsException ex) {
//log.error("Anzahl der �bergebenen Parameter zu der Meldung "
// + actMessId
// + " ist weniger als erwartet.", ex);
return composedMess + rawText;
}
rawText = rawText.substring(index + PARAMETER_TAG.length());
tagCount++;
}
composedMess += rawText;
if (tagCount != par.length) {
//log.debug("Die zu der Meldung " + actMessId
// + " �bergebenen Parameter sind mehr als die Meldung vorsieht.");
}
return composedMess;
}
/**
* Gibt den Title f�rs Dialogfenster.
* Dieser wird durch die Dialogart festgelegt
* (erster Teil in der MeldungsDefinition in der Properties-Datei).
*/
static String getTitle(String strVal) {
String title = null;
int choice = getValue(strVal);
switch (choice) {
case INFO:
title = "Info";
currentIconName = "info.gif";
break;
case WARNING:
title = "Warning";
currentIconName = "warn.gif";
break;
case QUESTION:
title = "Question";
currentIconName = "quest.gif";
break;
case ERROR:
title = "Error";
currentIconName = "error.gif";
break;
default:
title =
"Ung�ltiger IonType f�r diese Meldung. Pr�fen in �bersetzungsdatei.";
}
return title;
}
/**
* Liefert den Wert der �ber den Nemen �bergebenen Klassenvariablen.
*/
static int getValue(String fieldName) {
int val = -1;
if (fieldName.equals("INFO"))
return INFO;
else if (fieldName.equals("WARNING"))
return WARNING;
else if (fieldName.equals("ERROR"))
return ERROR;
else if (fieldName.equals("SYS_ERROR"))
return SYS_ERROR;
else if (fieldName.equals("QUESTION"))
return QUESTION;
else if (fieldName.equals("STYLE_NOBUTTON"))
return STYLE_NOBUTTON;
else if (fieldName.equals("STYLE_Y"))
return STYLE_Y;
else if (fieldName.equals("STYLE_Y_N"))
return STYLE_Y_N;
else if (fieldName.equals("STYLE_Y_N_C"))
return STYLE_Y_N_C;
return val;
}
private static String getStackTrace(Exception exception) {
if (exception == null)
return "null";
String stack = "";
StringWriter strWriter = new StringWriter();
exception.printStackTrace(new PrintWriter(strWriter));
stack = strWriter.toString();
stack = stack.replace('\r', ' ');
stack = stack.replace('\t', ' ');
return stack;
}
private static int display(String textID, String[] param,
Exception exception, Frame frame) {
String translatedMes = "";
String preparedMes = "";
String messageType = "";
String optionType = "";
String title = "";
MessagesDialog dialog = null;
actMessId = textID;
boolean messageFound = res.contains(textID);
translatedMes = res.getString(textID);
if (messageFound) {
try {
messageType =
translatedMes.substring(0, translatedMes.indexOf(':'));
translatedMes =
translatedMes.substring(translatedMes.indexOf(':') + 1);
optionType =
translatedMes.substring(0, translatedMes.indexOf(':'));
translatedMes =
translatedMes.substring(translatedMes.indexOf(':') + 1);
} catch (Exception ex) {
//log.debug("FALSCHES FORMAT: MESSAGE: " + textID);
}
} else { // Message not found
//log.debug("UserMessage: textID '" + textID
// + "' not found. Return "
// + "value 'CANCEL' = " + CANCEL);
// return CANCEL;
messageType = "ERROR";
optionType = "STYLE_Y";
translatedMes = "textID '" + textID + "' not found."
+ "\nIt is possible the message file not found.";
}
preparedMes = prepareMessage(translatedMes, param);
// Exception exception = getException(param);
// WARNING -> nach Warnung �bersetzen
title = res.getString(getTitle(messageType));
// WARNING -> JOptionPane.WARNING_MESSAGE
int messageTypeIndex = getValue(messageType);
// Button Set idetifizieren
int optionTypeIndex = getValue(optionType);
int result = CANCEL;
if (exception != null) {
String str = getStackTrace(exception);
if (exception instanceof MessageException) {
MessageException ex = (MessageException)exception;
if (ex.getException() != null)
str += "\n" + getStackTrace(ex.getException());
}
result = MessagesDialog.showDetailDialog(null, preparedMes,
title, optionTypeIndex,
messageTypeIndex, null,
str);
} else {
if (optionTypeIndex == STYLE_NOBUTTON) {
// Wird nicht mehr unterst�tzt
//log.debug("UserMessage: STYLE_NOBUTTON wird nicht unterst�tzt");
return result;
} else {
result = MessagesDialog.showConfirmDialog(null, preparedMes,
title,
optionTypeIndex,
messageTypeIndex);
}
}
return result;
}
/**
* �ffnet das Dialogfenster mit der �bersetzung der per Suchschl�ssel �bergebenen Meldung
* mit eingesetzten Parametern. F�r die �bersetzung der Parameter tr�gt die aufrufende Stelle die Sorge.
* Der Dialog ist modal zum Frame <code>frame</code>.
* @param <UL>
* <LI> textID - Suchschl�ssel der Meldung im Meldungspool,
* <LI> param - Array der in die Meldung einzusetztenden Parameter,
* <LI> frame - das Fenster, zu dem der Dialog modal ist.
* </UL>
* @return <UL>
* <LI> -1 wenn keine R�ckgabe m�glich ist oder Dialog NICHT MODAL ist.
* <LI> ButtonDialog.YES = 2
* <LI> ButtonDialog.NO = 4
* <LI> ButtonDialog.CANCEL = 8
* <LI> Wird das Dialog-Fenster ohne Buttonklick geschlossen (Kreuzchen oben rechts), so ist die R�ckgabe gleich ButtonDialog.CANCEL.
* </UL>
*/
public static int show(String messageId, String[] parameterList,
Exception anException, Frame parentFrame) {
return display(messageId, parameterList, anException, parentFrame);
}
public static int show(String messageId, String[] parameterList,
Exception anException) {
return display(messageId, parameterList, anException, (Frame)null);
}
public static int show(String messageId, String[] parameterList,
Frame parentFrame) {
return display(messageId, parameterList, (Exception)null,
parentFrame);
}
public static int show(String messageId, String[] parameterList) {
return display(messageId, parameterList, (Exception)null,
(Frame)null);
}
public static int show(String messageId, String parameter,
Frame parentFrame) {
return display(messageId, new String[] {
parameter
}, (Exception)null, parentFrame);
}
public static int show(String messageId, String parameter) {
return display(messageId, new String[] {
parameter
}, (Exception)null, (Frame)null);
}
public static int show(String messageId, Frame parentFrame) {
return display(messageId, (String[])null, (Exception)null,
parentFrame);
}
public static int show(String messageId) {
return display(messageId, (String[])null, (Exception)null,
(Frame)null);
}
public static int show(String messageId, Exception anException,
Frame aFrame) {
return display(messageId, (String[])null, anException, aFrame);
}
public static int show(String messageId, Exception anException) {
return display(messageId, (String[])null, anException, (Frame)null);
}
public static int show(Exception anException, Frame aFrame) {
if (anException instanceof MessageException) {
MessageException ex = (MessageException)anException;
return show(ex.getMessageId(), ex.getParameterList(), ex, aFrame);
} else
return show("UNHANDLED_EXCEPTION", (String[])null, anException,
aFrame);
}
}
|