1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package com.mindtree.techworks.insight;
25
26 import java.awt.Image;
27 import java.awt.Toolkit;
28 import java.awt.image.ImageProducer;
29 import java.io.File;
30 import java.io.IOException;
31 import java.net.URL;
32 import java.security.AccessController;
33 import java.security.PrivilegedAction;
34 import java.util.HashMap;
35 import java.util.Locale;
36 import java.util.Map;
37 import java.util.ResourceBundle;
38
39 import javax.swing.ImageIcon;
40
41
42
43
44
45
46
47
48
49 public final class ResourceManager {
50
51
52
53
54 private static ResourceManager instance = new ResourceManager();
55
56
57
58
59 private static final String imageResourceBundle = "com.mindtree.techworks.insight.images";
60
61
62
63
64 private ResourceBundle imageLocResourceBundle;
65
66
67
68
69 private Locale defaultLocale;
70
71
72
73
74 private Map imageIconCache;
75
76
77
78
79 private Object imageCacheMutex = new Object();
80
81
82
83
84 private ResourceManager () {
85 this.defaultLocale = Locale.getDefault();
86 imageIconCache = new HashMap();
87
88
89 imageLocResourceBundle = ResourceBundle.getBundle(imageResourceBundle);
90 }
91
92
93
94
95
96 public static ResourceManager getInstance() {
97 return instance;
98 }
99
100
101
102
103
104
105
106 private Image loadImage (final String resourcePath, final ClassLoader classLoader) {
107
108 Image loadedImage = null;
109 try {
110
111
112 String insightHomeResourcePath = System
113 .getProperty(InsightConstants.INSIGHT_HOME)
114 + File.separator + resourcePath;
115 File insightHomeResourceFile = new File(insightHomeResourcePath);
116 if (insightHomeResourceFile.exists()) {
117 loadedImage = new ImageIcon(insightHomeResourceFile.getAbsolutePath()).getImage();
118 }
119
120
121 if (null == loadedImage) {
122 ImageProducer imageProducer = (ImageProducer) AccessController.doPrivileged(new PrivilegedAction() {
123
124 public Object run() {
125 Object returnContent = null;
126 URL imageUrl = classLoader.getResource(resourcePath);
127 if (null != imageUrl) {
128 try {
129 returnContent = imageUrl.getContent();
130 } catch (IOException e) {
131
132
133 }
134 }
135 return returnContent;
136 }});
137
138 if (null != imageProducer) {
139 loadedImage = Toolkit.getDefaultToolkit().createImage(imageProducer);
140 }
141 }
142 }
143 catch (Exception ex) {
144
145
146 }
147
148 return loadedImage;
149 }
150
151
152
153
154
155
156 private String getResolvedImagekey (String imageKey) {
157 String resolvedKey = imageLocResourceBundle.getString(imageKey);
158 if (null == resolvedKey || resolvedKey.trim().length() == 0) {
159
160 ResourceBundle defaultResourceBundle = ResourceBundle.getBundle(imageResourceBundle, Locale.ENGLISH);
161 resolvedKey = defaultResourceBundle.getString(imageKey);
162 if (null == resolvedKey || resolvedKey.trim().length() == 0) {
163 resolvedKey = imageKey;
164 }
165 }
166 return resolvedKey;
167 }
168
169
170
171
172
173
174
175 public ImageIcon loadImageIcon (String imageKey) {
176 return loadImageIcon(imageKey, getClass().getClassLoader());
177 }
178
179
180
181
182
183
184
185
186
187 public ImageIcon loadImageIcon (String imageKey, ClassLoader classLoader) {
188 String resolvedImageKey = getResolvedImagekey(imageKey);
189
190
191 ImageIcon imageIcon = (ImageIcon) imageIconCache.get(resolvedImageKey);
192
193 if (null == imageIcon) {
194
195 synchronized (imageCacheMutex) {
196
197 imageIcon = (ImageIcon) imageIconCache.get(resolvedImageKey);
198 if (null == imageIcon) {
199 Image imageForIcon = loadImage(resolvedImageKey, classLoader);
200 if (null != imageForIcon) {
201 imageIcon = new ImageIcon(imageForIcon);
202 imageIconCache.put(resolvedImageKey, imageIcon);
203 } else {
204 imageIcon = new ImageIcon();
205 }
206 }
207 }
208
209 }
210
211 return imageIcon;
212 }
213
214
215
216
217 public Locale getDefaultLocale() {
218 return defaultLocale;
219 }
220 }