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
|
package util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.net.URL;
import javax.swing.ImageIcon;
import org.apache.commons.io.IOUtils;
import org.apache.log4j.Logger;
/**
* Helper class for loading resources.
* This should be error safe loaders with a fall back in case the
* requested resource can't be found, or isn't of the expected type.
*/
public class ResourceLoader {
/**
* Logger for this class
*/
private final static Logger LOGGER = Logger.getLogger(ResourceLoader.class);
/**
* Load the given resource as an ImageIcon.
* This is guaranteed to never throw an Exception and always return
* an ImageIcon. If the requested resource could not be loaded,
* an icon is generated, containing an error message. If even that
* fails, an empty icon is returned.
* @param path Resource path to load
* @param description Icon description
* @return ImageIcon instance
*/
public static ImageIcon getIcon(String path, String description) {
URL url = ResourceLoader.class.getResource(path);
if (url == null) {
LOGGER.error("Resource not found: " + path);
} else {
try {
return new ImageIcon(url, description);
} catch (Exception e) {
LOGGER.error("Resource not loadable: " + path);
}
}
// If we reach here loading failed, create image containing error
// message
try {
return errorIcon("Invalid Resource: " + path);
} catch (Throwable t) {
return new ImageIcon();
}
}
/**
* Load the given resource as an ImageIcon.
* This is guaranteed to never throw an Exception and always return
* an ImageIcon. If the requested resource could not be loaded,
* an icon is generated, containing an error message. If even that
* fails, an empty icon is returned.
* @param path Resource path to load
* @return ImageIcon instance
*/
public static ImageIcon getIcon(String path) {
return getIcon(path, path);
}
/**
* Helper that will create an icon with given text.
* @param errorText Text to render to icon
* @return the icon
*/
private static ImageIcon errorIcon(String errorText) {
Font font = new Font("Tahoma", Font.PLAIN, 20);
// get dimensions of text
FontRenderContext frc = new FontRenderContext(null, true, true);
Rectangle2D bounds = font.getStringBounds(errorText, frc);
int w = (int) bounds.getWidth();
int h = (int) bounds.getHeight();
// create a BufferedImage object
BufferedImage image = new BufferedImage(w, h,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
// set color and other parameters
g.setColor(Color.WHITE);
g.fillRect(0, 0, w, h);
g.setColor(Color.RED);
g.setFont(font);
g.drawString(errorText, (float) bounds.getX(), (float) -bounds.getY());
g.dispose();
return new ImageIcon(image, "ERROR");
}
/**
* Tries to load the given resource treating it as a text file
* @param path Resource path to load
* @return content of the loaded resource as String
*/
public static String getTextFile(String path) {
String fileContent = null;
try {
fileContent = IOUtils.toString(ResourceLoader.class.getResourceAsStream(path));
} catch (Exception e) {
LOGGER.error("IO error while trying to load resource '" + path + "'. See trace: ", e);
}
if (fileContent != null) {
return fileContent;
} else {
return "Resource '" + path + "' not found.";
}
}
}
|