%line | %branch | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
tsukuba_bunko.util.ResourceLocator |
|
|
1 | /* |
|
2 | * Common Library for TBAS Softwares |
|
3 | * Language: Java |
|
4 | * |
|
5 | * All Rights Reserved. |
|
6 | * (c) Copyright 2003 by Tsukuba Bunko. |
|
7 | * |
|
8 | * $Id: ResourceLocator.java,v 1.1 2005/07/11 12:49:19 ppoi Exp $ |
|
9 | */ |
|
10 | package tsukuba_bunko.util; |
|
11 | ||
12 | import java.io.File; |
|
13 | ||
14 | ||
15 | /** |
|
16 | * リソースのファイルシステム上での位置(ファイルパス)を取得する機能を提供します。 |
|
17 | * @author $Author: ppoi $ |
|
18 | * @version $Revision: 1.1 $ |
|
19 | */ |
|
20 | public abstract class ResourceLocator { |
|
21 | ||
22 | /** |
|
23 | * インスタンス化する <code>ResourceLocator</code> 実装クラスを指定するシステムプロパティ:"tsukuba_bunko.util.ResourceLocator.impl" |
|
24 | */ |
|
25 | public static final String IMPL_CLASS_PROPERTY = "tsukuba_bunko.util.ResourceLocator.impl"; |
|
26 | ||
27 | ||
28 | /** |
|
29 | * <code>ResourceLocator</code> のインスタンスを生成します。 |
|
30 | */ |
|
31 | protected ResourceLocator() |
|
32 | { |
|
33 | 0 | super(); |
34 | 0 | } |
35 | ||
36 | ||
37 | /** |
|
38 | * <code>resourceName</code> で指定されるリソースを現在のスレッドのコンテクストで検索し、そのファイルシステム上での位置を取得します。 |
|
39 | * @param resourceName ファイルパスを取得するリソースのリソース名 |
|
40 | * @return リソースのファイルパス。検出不能な場合 <code>null</code> |
|
41 | * @throws ResourceDetectionException リソースの検出に失敗した場合 |
|
42 | */ |
|
43 | public File findLocation( String resourceName ) |
|
44 | throws ResourceDetectionException |
|
45 | { |
|
46 | 0 | return findLocation( resourceName, Thread.currentThread().getContextClassLoader() ); |
47 | } |
|
48 | ||
49 | /** |
|
50 | * <code>resourceName</code> で指定されるリソースを指定されたクラスローダで検索し、そのファイルシステム上での位置を取得します。 |
|
51 | * @param resourceName ファイルパスを取得するリソースのリソース名 |
|
52 | * @param classLoader リソースを検索するクラスローダ |
|
53 | * @return リソースのファイルパス |
|
54 | * @throws ResourceDetectionException リソースの検出に失敗した場合 |
|
55 | */ |
|
56 | public abstract File findLocation( String resourceName, ClassLoader classLoader ) |
|
57 | throws ResourceDetectionException; |
|
58 | ||
59 | ||
60 | // |
|
61 | // ファクトリ |
|
62 | // |
|
63 | /** |
|
64 | * <code>ResourceLocator</code> インスタンスを生成します。 |
|
65 | * 生成される <code>ResourceLocator</code> インスタンスのクラスはシステムプロパティを元に決定されます。プロパティ名は {@link #IMPL_CLASS_PROPERTY} を参照してください。 |
|
66 | * システムプロパティが設定されていない場合、デフォルトの <code>ResourceLocator</code> 実装クラスが使用されます。 |
|
67 | * @return 生成された <code>ResourceLocator</code> インスタンス |
|
68 | * @throws ClassNotFoundException 指定されたクラスが現在のスレッドのコンテクストで見つからなかった場合 |
|
69 | * @throws InstantiationException 実装クラスのインスタンス化に失敗した場合 |
|
70 | * @throws IllegalAccessException 実装クラス、またはそのコンストラクタのアクセス権が public でない場合 |
|
71 | */ |
|
72 | public static ResourceLocator newInstance() |
|
73 | throws ClassNotFoundException, InstantiationException, IllegalAccessException |
|
74 | { |
|
75 | 0 | String className = System.getProperty( ResourceLocator.IMPL_CLASS_PROPERTY, "tsukuba_bunko.util.locator.ResourceLocatorImpl" ); |
76 | 0 | return newInstance( Thread.currentThread().getContextClassLoader().loadClass(className) ); |
77 | } |
|
78 | ||
79 | /** |
|
80 | * <code>ResourceLocator</code> インスタンスを生成します。 |
|
81 | * @param implClass <code>ResourceLocator</code> 実装クラス |
|
82 | * @return 生成された <code>ResourceLocator</code> インスタンス |
|
83 | * @throws InstantiationException 実装クラスのインスタンス化に失敗した場合 |
|
84 | * @throws IllegalAccessException 実装クラス、またはそのコンストラクタのアクセス権が public でない場合 |
|
85 | */ |
|
86 | public static ResourceLocator newInstance( Class implClass ) |
|
87 | throws InstantiationException, IllegalAccessException |
|
88 | { |
|
89 | 0 | if( implClass == null ) { |
90 | 0 | throw new IllegalArgumentException( "implement class is not specified." ); |
91 | } |
|
92 | 0 | else if( !ResourceLocator.class.isAssignableFrom(implClass) ) { |
93 | 0 | throw new IllegalArgumentException( implClass.getName() + " is not extends from ResourceLocator." ); |
94 | } |
|
95 | ||
96 | 0 | return (ResourceLocator)implClass.newInstance(); |
97 | } |
|
98 | } |
This report is generated by jcoverage, Maven and Maven JCoverage Plugin. |