%line | %branch | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
tsukuba_bunko.resource.DeserializerMapping |
|
|
1 | /* |
|
2 | * Common Library for TBAS Softwares |
|
3 | * |
|
4 | * All Rights Reserved. |
|
5 | * (c) Copyright 2002 by Tsukuba Bunko. |
|
6 | * |
|
7 | * $Id: DeserializerMapping.java,v 1.1 2005/07/11 12:49:18 ppoi Exp $ |
|
8 | */ |
|
9 | package tsukuba_bunko.resource; |
|
10 | ||
11 | import java.util.Enumeration; |
|
12 | import java.util.Map; |
|
13 | import java.util.ResourceBundle; |
|
14 | ||
15 | ||
16 | /** |
|
17 | * データ型名と <code>ResourceDeserializer</code> のマップを管理します。このクラスは thread-safe ではありませんので、malti-thread |
|
18 | * 環境で使用する場合は、同期の制御を行ってください。 |
|
19 | * @author $Author: ppoi $ |
|
20 | * @version $Revision: 1.1 $ |
|
21 | */ |
|
22 | public class DeserializerMapping { |
|
23 | ||
24 | /** |
|
25 | * データ型名 - ResourceDeserializer マップ |
|
26 | */ |
|
27 | 80 | private Map _registry = new java.util.HashMap( 89 ); |
28 | ||
29 | ||
30 | /** |
|
31 | * <code>DeserializerMapping</code> のインスタンスを作成します。 |
|
32 | */ |
|
33 | public DeserializerMapping() |
|
34 | { |
|
35 | 80 | super(); |
36 | 80 | } |
37 | ||
38 | ||
39 | /** |
|
40 | * データ型 <code>dataType</code> に <code>ResourceDeserializer</code> クラス |
|
41 | * <code>deserializerClass</code> を関連づけます。 |
|
42 | * @param typeName データ型名 |
|
43 | * @param deserializer 使用する <code>ResourceDeserializer</code> |
|
44 | * @exception IllegalArgumentException <code>deserializerClass</code> が妥当な <code>ResourceDeserializer</code> サブクラスではない場合 |
|
45 | */ |
|
46 | public void register( String typeName, ResourceDeserializer deserializer ) |
|
47 | { |
|
48 | 720 | deserializer.setDeserializerMapping( this ); |
49 | 720 | deserializer.setTypeName( typeName ); |
50 | 720 | _registry.put( typeName, deserializer ); |
51 | 720 | } |
52 | ||
53 | /** |
|
54 | * データ型 <code>typeName</code> に関連づけられた <code>ResourceDeserializer</code> クラスを削除します。 |
|
55 | * @param typeName |
|
56 | */ |
|
57 | public void unregister( String typeName ) |
|
58 | { |
|
59 | 0 | _registry.remove( typeName ); |
60 | 0 | } |
61 | ||
62 | /** |
|
63 | * <code>dataType</code> に関連づけられた <code>ResourceDeserializer</code> を取得します。 |
|
64 | * @param dataType データ型名 |
|
65 | * @return 関連づけられている <code>ResourceDeserializer</code> |
|
66 | * @exception IllegalStateException <code>ValueDeserialzier</code> の取得に失敗した場合 |
|
67 | */ |
|
68 | public ResourceDeserializer getResourceDeserializer( String dataType ) |
|
69 | { |
|
70 | 170 | return (ResourceDeserializer)_registry.get( dataType ); |
71 | } |
|
72 | ||
73 | /** |
|
74 | * 指定された reosurce bundle を使用して <code>DeserializerMapping</code> のインスタンスを作成します。 |
|
75 | * @param bundleName ResourceBundle のベースクラス名 |
|
76 | * @return 作成された <code>DeserializerMapping</code> のインスタンス |
|
77 | */ |
|
78 | public static DeserializerMapping newInstance( String bundleName ) |
|
79 | { |
|
80 | 80 | DeserializerMapping mapping = new DeserializerMapping(); |
81 | ||
82 | 80 | ResourceBundle source = ResourceBundle.getBundle( bundleName ); |
83 | 115 | ClassLoader cl = DeserializerMapping.class.getClassLoader(); |
84 | ||
85 | 80 | Enumeration keys = source.getKeys(); |
86 | 80 | String key = null; |
87 | 800 | while( keys.hasMoreElements() ) { |
88 | 720 | key = (String)keys.nextElement(); |
89 | 720 | String className = source.getString( key ); |
90 | try { |
|
91 | 720 | mapping.register( key, (ResourceDeserializer)cl.loadClass(className).newInstance() ); |
92 | } |
|
93 | 0 | catch( Exception e ) { |
94 | 0 | System.err.println( "[libtbas] ERROR : illegal class \"" + className + "\"" ); |
95 | 0 | e.printStackTrace(); |
96 | 720 | } |
97 | 720 | } |
98 | ||
99 | 80 | return mapping; |
100 | } |
|
101 | ||
102 | /** |
|
103 | * リソースで指定された内容から <code>DeserializerMapping</code> のインスタンスを作成します。 |
|
104 | * @return 作成された <code>DeserializerMapping</code> のインスタンス |
|
105 | */ |
|
106 | public static DeserializerMapping newInstance() |
|
107 | { |
|
108 | 70 | return newInstance( System.getProperty("libtbas.resource.mapping", "tsukuba_bunko.resource.mapping") ); |
109 | } |
|
110 | } |
This report is generated by jcoverage, Maven and Maven JCoverage Plugin. |