summaryrefslogtreecommitdiff
path: root/src/interfaces/jdbc/postgresql/util/PSQLException.java
blob: 1a0d1973587af80abb1e34f042d73d7970c5dc8c (plain)
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
package postgresql.util;

import java.sql.*;
import java.text.*;
import java.util.*;

/**
 * This class extends SQLException, and provides our internationalisation handling
 */
public class PSQLException extends SQLException
{
    private String message;
    
    // Cache for future errors
    static ResourceBundle bundle;
    
    /**
     * This provides the same functionality to SQLException
     * @param error Error string
     */
    public PSQLException(String error) {
	super();
	translate(error,null);
    }
    
    /**
     * A more generic entry point.
     * @param error Error string or standard message id
     * @param args Array of arguments
     */
    public PSQLException(String error,Object[] args)
    {
	super();
	translate(error,args);
    }
    
    /**
     * Helper version for 1 arg
     */
    public PSQLException(String error,Object arg)
    {
	super();
	Object[] argv = new Object[1];
	argv[0] = arg;
	translate(error,argv);
    }
    
    /**
     * This does the actual translation
     */
    private void translate(String id,Object[] args)
    {
	if(bundle == null) {
	    try {
		bundle = ResourceBundle.getBundle("postgresql.errors");
	    } catch(MissingResourceException e) {
	    }
	}
	
	// Now look up a localized message. If one is not found, then use
	// the supplied message instead.
	message = null;
	try {
	    message = bundle.getString(id);
	} catch(MissingResourceException e) {
	    message = id;
	}
	
	// Expand any arguments
	if(args!=null)
	    message = MessageFormat.format(message,args);
	
    }
    
    /**
     * Overides Throwable
     */
    public String getLocalizedMessage()
    {
	return message;
    }
    
    /**
     * Overides Throwable
     */
    public String getMessage()
    {
	return message;
    }
    
    /**
     * Overides Object
     */
    public String toString()
    {
	return message;
    }
    
}