1
2
3
4
5
6
7
8
9 package tsukuba_bunko.peko.resource;
10
11 import java.awt.Color;
12
13 import java.util.Map;
14
15 import java.lang.ref.WeakReference;
16
17 import tsukuba_bunko.peko.Logger;
18
19
20 /***
21 * 色の管理を提供します。
22 * @author $Author: ppoi $
23 * @version $Revision: 1.1 $
24 */
25 public class ColorManager {
26
27 /***
28 * 唯一のインスタンス
29 */
30 private static ColorManager _instance = null;
31
32 /***
33 * キャッシュ
34 */
35 private Map _cache = null;
36
37
38 /***
39 * <code>ColorManager</code> のインスタンスを作成します。
40 */
41 private ColorManager()
42 {
43 super();
44 }
45
46
47 /***
48 * 初期化を行います。
49 */
50 private void initialize()
51 {
52 _cache = new java.util.HashMap( 89 );
53 _cache.put( "black", new WeakReference(Color.black) );
54 _cache.put( "white", new WeakReference(Color.white) );
55 _cache.put( "red", new WeakReference(Color.red) );
56 _cache.put( "blue", new WeakReference(Color.blue) );
57 _cache.put( "green", new WeakReference(Color.green) );
58 _cache.put( "yellow", new WeakReference(Color.yellow) );
59 _cache.put( "gray", new WeakReference(Color.gray) );
60 _cache.put( "darkGray", new WeakReference(Color.darkGray) );
61 _cache.put( "lightGray", new WeakReference(Color.lightGray) );
62 _cache.put( "cyan", new WeakReference(Color.cyan) );
63 _cache.put( "magenta", new WeakReference(Color.magenta) );
64 _cache.put( "orange", new WeakReference(Color.orange) );
65 _cache.put( "pink", new WeakReference(Color.pink) );
66 _cache.put( null, new WeakReference(Color.black) );
67 }
68
69 public Color getColor( String name )
70 {
71 Color color = null;
72
73 Object cache = _cache.get( name );
74 if( cache != null ) {
75 color = (Color)((WeakReference)cache).get();
76 }
77
78 if( color == null ) {
79 if( name.startsWith("#") ) {
80 try {
81 color = new Color( Integer.parseInt(name.substring(1), 16) );
82 WeakReference ref = new WeakReference( color );
83 _cache.put( name, ref );
84 }
85 catch( Exception e ) {
86 Logger.error( "[resource] invalid color value specified. :" + name, e );
87 Logger.debug( "[resource] using default color. (black)" );
88 color = Color.black;
89 }
90 }
91 else {
92 Logger.error( "[resource] invalid color name specified. :" + name );
93 Logger.debug( "[resource] using default color. (black)" );
94 color = Color.black;
95 }
96 }
97 return color;
98 }
99
100
101 /***
102 * 唯一の <code>ColorManager</code> インスタンスを取得します。
103 * @return 唯一のインスタンス
104 */
105 public static ColorManager getInstance()
106 {
107 if( _instance == null ) {
108 synchronized( ColorManager.class ) {
109 if( _instance == null ) {
110 _instance = new ColorManager();
111 _instance.initialize();
112 }
113 }
114 }
115 return _instance;
116 }
117 }