Coverage report

  %line %branch
tsukuba_bunko.peko.resource.ResourceManager
0% 
0% 

 1  
 /*
 2  
  * "Peko" Visual Novel System
 3  
  *
 4  
  * All Rights Reserved.
 5  
  * Copyright (c) 1999-2003 Tsukuba Bunko.
 6  
  *
 7  
  * $Id: ResourceManager.java,v 1.1 2005/07/11 12:49:19 ppoi Exp $
 8  
  */
 9  
 package tsukuba_bunko.peko.resource;
 10  
 
 11  
 import	java.net.URL;
 12  
 
 13  
 import	tsukuba_bunko.resource.DeserializerMapping;
 14  
 import	tsukuba_bunko.resource.Resources;
 15  
 
 16  
 import	tsukuba_bunko.peko.InitializationError;
 17  
 import	tsukuba_bunko.peko.Logger;
 18  
 
 19  
 
 20  
 /**
 21  
  * "Peko" が使用するリソースを管理する機能を提供します。
 22  
  * @author	$Author: ppoi $
 23  
  * @version	$Revision: 1.1 $
 24  
  */
 25  
 public class ResourceManager	{
 26  
 
 27  
 	/**
 28  
 	 * ログメッセージを格納したファイル
 29  
 	 */
 30  
 	protected static final String	RES_MESSAGE = "messages.xml";
 31  
 
 32  
 	/**
 33  
 	 * システム構成リソースを格納したファイル
 34  
 	 */
 35  
 	protected static final String	RES_SYSTEM = "system.xml";
 36  
 
 37  
 	/**
 38  
 	 * メニュー項目リソースを格納したファイル
 39  
 	 */
 40  
 	protected static final String	RES_MENU = "menu.xml";
 41  
 
 42  
 	/**
 43  
 	 * ダイアログ構成リソースを格納したファイル
 44  
 	 */
 45  
 	protected static final String	RES_DIALOG = "dialog.xml";
 46  
 
 47  
 	/**
 48  
 	 * キャンバス構成リソースを格納したファイル
 49  
 	 */
 50  
 	protected static final String	RES_CANVAS = "canvas.xml";
 51  
 
 52  
 	/**
 53  
 	 * ゲーム構成リソースを格納したファイル
 54  
 	 */
 55  
 	protected static final String	RES_GAME ="game-info.xml";
 56  
 
 57  
 	/**
 58  
 	 * タイトル画面構成リソースを格納したファイル
 59  
 	 */
 60  
 	protected static final String	RES_TITLE = "title.xml";
 61  
 
 62  
 
 63  
 	/**
 64  
 	 * 唯一のインスタンス
 65  
 	 */
 66  0
 	private static ResourceManager	_instance = null;
 67  
 
 68  
 
 69  
 	/**
 70  
 	 * リソースローダ
 71  
 	 */
 72  0
 	private PekoResourceLoader	_loader = null;
 73  
 
 74  
 
 75  
 	/**
 76  
 	 * リソース
 77  
 	 */
 78  0
 	private Resources	_resources = null;
 79  
 
 80  
 	/**
 81  
 	 * ロケーションリソース
 82  
 	 */
 83  0
 	private LocationResources	_locationResources = null;
 84  
 
 85  
 
 86  
 	/**
 87  
 	 * <code>ResourceManager</code> のインスタンスを作成します。
 88  
 	 */
 89  
 	protected ResourceManager()
 90  
 	{
 91  0
 		super();
 92  0
 	}
 93  
 
 94  
 
 95  
 	/**
 96  
 	 * リソースが存在するかどうかを判定します。
 97  
 	 * @param	resourceID	リソース ID
 98  
 	 * @return	存在する場合 <code>true</code>、存在しない場合 <code>false</code>
 99  
 	 */
 100  
 	public boolean exists( String resourceID )
 101  
 	{
 102  0
 		return (_resources.getResource(resourceID) != null);
 103  
 	}
 104  
 
 105  
 	/**
 106  
 	 * リソースを取得します。
 107  
 	 * @param	resourceID	リソース ID
 108  
 	 * @return	リソース。対応するリソースが存在しない場合 <code>null</code>。
 109  
 	 */
 110  
 	public Object getResource( String resourceID )
 111  
 	{
 112  0
 		return getResource( resourceID, false );
 113  
 	}
 114  
 
 115  
 	/**
 116  
 	 * リソースを取得します。
 117  
 	 * @param	resourceID	リソース ID
 118  
 	 * @param	nowarn	<code>true</code> の場合、ワーニングログを出力しない
 119  
 	 * @return	リソース。対応するリソースが存在しない場合 <code>null</code>。
 120  
 	 */
 121  
 	public Object getResource( String resourceID, boolean nowarn )
 122  
 	{
 123  0
 		Object	resource = _resources.getResource( resourceID );
 124  0
 		if( !nowarn )	{
 125  0
 			if( resource == null )	{
 126  0
 				Logger.warn( MessageIDs.RES0001W.getMessage( new Object[]{resourceID} ) );
 127  
 			}
 128  
 		}
 129  0
 		return resource;
 130  
 	}
 131  
 
 132  
 	/**
 133  
 	 * ロケーションリソースを取得します。
 134  
 	 * @return	ロケーションリソース
 135  
 	 */
 136  
 	public LocationResources getLocationResources()
 137  
 	{
 138  0
 		return _locationResources;
 139  
 	}
 140  
 
 141  
 
 142  
 	/**
 143  
 	 * リソースローダを取得します。
 144  
 	 * @return	リソースローダ
 145  
 	 */
 146  
 	private PekoResourceLoader getResourceLoader()
 147  
 	{
 148  
 		try	{
 149  0
 			if( _loader == null )	{
 150  0
 				_loader = new PekoResourceLoader();
 151  
 			}
 152  0
 			return _loader;
 153  
 		}
 154  0
 		catch( Exception e )	{
 155  0
 			InitializationError	ie = new InitializationError( "fail to create instance of PekoResourceLoader", e );
 156  0
 			Logger.fatal( MessageIDs.RES0014F, e );
 157  0
 			throw ie;
 158  
 		}
 159  
 	}
 160  
 
 161  
 	/**
 162  
 	 * ログメッセージを読み込みます。
 163  
 	 */
 164  
 	private void loadLogMessages()
 165  
 	{
 166  
 		try	{
 167  0
 			URL	resourceURL = getClass().getClassLoader().getResource( ResourceManager.RES_MESSAGE );
 168  0
 			if( resourceURL == null )	{
 169  0
 				InitializationError	ie = new InitializationError( "missing resource file of log messgages." );
 170  0
 				Logger.fatal( "[RES9998F] missing resource file of log messgages.", ie );
 171  0
 				throw ie;
 172  
 			}
 173  0
 			Logger.debug( "loading log messages from " + resourceURL.toString() );
 174  
 
 175  0
 			_resources = Resources.newInstance( resourceURL );
 176  
 		}
 177  0
 		catch( Exception e )	{
 178  0
 			InitializationError	ie = new InitializationError( "fail to load resources of log messages.", e );
 179  0
 			Logger.fatal( "[RES9999F] fail to load resources of log messages.", ie );
 180  0
 			throw ie;
 181  0
 		}
 182  0
 	}
 183  
 
 184  
 	/**
 185  
 	 * システム構成リソースを読み込みます。
 186  
 	 */
 187  
 	private void loadSystemConfigurationResources()
 188  
 	{
 189  
 		try	{
 190  0
 			URL	resourceURL = getClass().getClassLoader().getResource( ResourceManager.RES_SYSTEM );
 191  0
 			if( resourceURL == null )	{
 192  0
 				InitializationError	ie = new InitializationError( "missing resource file of PVNS resource." );
 193  0
 				Logger.fatal( MessageIDs.RES0002F, new Object[]{ResourceManager.RES_SYSTEM}, ie );
 194  0
 				throw ie;
 195  
 			}
 196  0
 			Logger.debug( "loadingresources of system configuration from " + resourceURL.toString() );
 197  
 
 198  0
 			PekoResourceLoader	loader = getResourceLoader();
 199  0
 			loader.loadResource( resourceURL, _resources );
 200  
 		}
 201  0
 		catch( Exception e )	{
 202  0
 			InitializationError	ie = new InitializationError( "fail to load resources of system configuration", e );
 203  0
 			Logger.fatal( MessageIDs.RES0003F, new Object[]{ResourceManager.RES_SYSTEM}, ie );
 204  0
 			throw ie;
 205  0
 		}
 206  
 
 207  0
 		LocationConfigurator	configurator = new LocationConfigurator();
 208  0
 		_locationResources = configurator.configure( _resources );
 209  0
 	}
 210  
 
 211  
 	/**
 212  
 	 * メニュー項目構成リソースを読み込みます。
 213  
 	 */
 214  
 	private void loadMenuResources()
 215  
 	{
 216  
 		try	{
 217  0
 			URL	resourceURL = getClass().getClassLoader().getResource( ResourceManager.RES_MENU );
 218  0
 			if( resourceURL == null )	{
 219  0
 				InitializationError	ie = new InitializationError( "missing resource file of menu items." );
 220  0
 				Logger.fatal( MessageIDs.RES0002F, new Object[]{ResourceManager.RES_MENU}, ie );
 221  0
 				throw ie;
 222  
 			}
 223  0
 			Logger.debug( "loading resources of menu items from " + resourceURL.toString() );
 224  
 
 225  0
 			PekoResourceLoader	loader = getResourceLoader();
 226  0
 			loader.loadResource( resourceURL, _resources );
 227  
 		}
 228  0
 		catch( Exception e )	{
 229  0
 			InitializationError	ie = new InitializationError( "fail to load resources of menu item configuration", e );
 230  0
 			Logger.fatal( MessageIDs.RES0003F, new Object[]{ResourceManager.RES_SYSTEM}, ie );
 231  0
 			throw ie;
 232  0
 		}
 233  0
 	}
 234  
 
 235  
 	/**
 236  
 	 * ダイアログ構成リソースを読み込みます。
 237  
 	 */
 238  
 	private void loadDialogConfigurationResources()
 239  
 	{
 240  
 		try	{
 241  0
 			URL	resourceURL = getClass().getClassLoader().getResource( ResourceManager.RES_DIALOG );
 242  0
 			if( resourceURL == null )	{
 243  0
 				InitializationError	ie = new InitializationError( "missing resource file of dialog configuration." );
 244  0
 				Logger.fatal( MessageIDs.RES0002F, new Object[]{ResourceManager.RES_DIALOG}, ie );
 245  0
 				throw ie;
 246  
 			}
 247  0
 			Logger.debug( "loading resources of dialog configuration from " + resourceURL.toString() );
 248  
 
 249  0
 			PekoResourceLoader	loader = getResourceLoader();
 250  0
 			loader.loadResource( resourceURL, _resources );
 251  
 		}
 252  0
 		catch( Exception e )	{
 253  0
 			InitializationError	ie = new InitializationError( "fail to load resources of dialog configuration", e );
 254  0
 			Logger.fatal( MessageIDs.RES0003F, new Object[]{ResourceManager.RES_DIALOG}, ie );
 255  0
 			throw ie;
 256  0
 		}
 257  0
 	}
 258  
 
 259  
 	/**
 260  
 	 * キャンバス構成リソースを読み込みます。
 261  
 	 */
 262  
 	private void loadCanvasConfigurationResources()
 263  
 	{
 264  
 		try	{
 265  0
 			URL	resourceURL = getClass().getClassLoader().getResource( ResourceManager.RES_CANVAS );
 266  0
 			if( resourceURL == null )	{
 267  0
 				InitializationError	ie = new InitializationError( "missing resource file of canvas configuration." );
 268  0
 				Logger.fatal( MessageIDs.RES0002F, new Object[]{ResourceManager.RES_CANVAS}, ie );
 269  0
 				throw ie;
 270  
 			}
 271  0
 			Logger.debug( "loading resources of canvas configuration from " + resourceURL.toString() );
 272  
 
 273  0
 			PekoResourceLoader	loader = getResourceLoader();
 274  0
 			loader.loadResource( resourceURL, _resources );
 275  
 		}
 276  0
 		catch( Exception e )	{
 277  0
 			InitializationError	ie = new InitializationError( "fail to load resources of canvas configuration", e );
 278  0
 			Logger.fatal( MessageIDs.RES0003F, new Object[]{ResourceManager.RES_CANVAS}, ie );
 279  0
 			throw ie;
 280  0
 		}
 281  0
 	}
 282  
 
 283  
 	/**
 284  
 	 * タイトル画面構成リソースを読み込みます。
 285  
 	 */
 286  
 	private void loadTitleConfigurationResources()
 287  
 	{
 288  
 		try	{
 289  0
 			URL	resourceURL = getClass().getClassLoader().getResource( ResourceManager.RES_TITLE );
 290  0
 			if( resourceURL == null )	{
 291  0
 				InitializationError	ie = new InitializationError( "missing resource file of title configuration." );
 292  0
 				Logger.fatal( MessageIDs.RES0002F, new Object[]{ResourceManager.RES_TITLE}, ie );
 293  0
 				throw ie;
 294  
 			}
 295  0
 			Logger.debug( "loading resources of title configuration from " + resourceURL.toString() );
 296  
 
 297  0
 			PekoResourceLoader	loader = getResourceLoader();
 298  0
 			loader.loadResource( resourceURL, _resources );
 299  
 		}
 300  0
 		catch( Exception e )	{
 301  0
 			InitializationError	ie = new InitializationError( "fail to load resources of title configuration", e );
 302  0
 			Logger.fatal( MessageIDs.RES0003F, new Object[]{ResourceManager.RES_TITLE}, ie );
 303  0
 			throw ie;
 304  0
 		}
 305  0
 	}
 306  
 
 307  
 
 308  
 
 309  
 	/**
 310  
 	 * ゲーム情報リソースを読み込みます。
 311  
 	 */
 312  
 	private void loadGameInfoResources()
 313  
 	{
 314  
 		try	{
 315  0
 			URL	resourceURL = getClass().getClassLoader().getResource( ResourceManager.RES_GAME );
 316  0
 			if( resourceURL == null )	{
 317  0
 				InitializationError	ie = new InitializationError( "missing resource file of game information resource." );
 318  0
 				Logger.fatal( MessageIDs.RES0002F, new Object[]{ResourceManager.RES_GAME}, ie );
 319  0
 				throw ie;
 320  
 			}
 321  0
 			Logger.debug( "loading game information resources from " + resourceURL.toString() );
 322  
 
 323  0
 			PekoResourceLoader	loader = getResourceLoader();
 324  
 
 325  0
 			DeserializerMapping	mapping = loader.getDeserializerMapping();
 326  0
 			IconDeserializer	deserializer = (IconDeserializer)mapping.getResourceDeserializer( "peko:icon" );
 327  0
 			deserializer.setBaseURL( _locationResources.getMiscDirecotryURL() );
 328  
 
 329  0
 			loader.loadResource( resourceURL, _resources );
 330  
 		}
 331  0
 		catch( Exception e )	{
 332  0
 			InitializationError	ie = new InitializationError( "fail to load resources of game information resource", e );
 333  0
 			Logger.fatal( MessageIDs.RES0003F, new Object[]{ResourceManager.RES_GAME}, ie );
 334  0
 			throw ie;
 335  0
 		}
 336  0
 	}
 337  
 
 338  
 	/**
 339  
 	 * <code>ResourceManager</code> のインスタンスを初期化します。
 340  
 	 * @throws	InitializationError	初期化に失敗した場合
 341  
 	 */
 342  
 	private void initialize()
 343  
 	{
 344  0
 		Logger.debug( "[resource] start initializing ResourceManager." );
 345  
 
 346  0
 		loadLogMessages();
 347  
 
 348  0
 		loadSystemConfigurationResources();
 349  0
 		loadMenuResources();
 350  0
 		loadDialogConfigurationResources();
 351  0
 		loadCanvasConfigurationResources();
 352  0
 		loadTitleConfigurationResources();
 353  
 
 354  0
 		loadGameInfoResources();
 355  
 
 356  0
 		Logger.debug( "[resource] finish initializing ResourceManager." );
 357  0
 	}
 358  
 
 359  
 
 360  
 	/**
 361  
 	 * <code>ResourceManager</code> の唯一のインスタンスを取得します。
 362  
 	 * @return	唯一の <code>ResourceManager</code> のインスタンス
 363  
 	 */
 364  
 	public static ResourceManager getInstance()
 365  
 	{
 366  0
 		if( _instance == null )	{
 367  0
 			synchronized( ResourceManager.class )	{
 368  0
 				if( _instance == null )	{
 369  0
 					_instance = new ResourceManager();
 370  0
 					_instance.initialize();
 371  
 				}
 372  0
 			}
 373  
 		}
 374  0
 		return _instance;
 375  
 	}
 376  
 }

This report is generated by jcoverage, Maven and Maven JCoverage Plugin.