/*
 *  Copyright (c) 2012-2014 RONDHUIT Co.,Ltd.
 *
 */

package com.rondhuit.commons;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

/**
 * リソースローダーユーティリティクラス。
 * 
 * @since 0.1
 */
public final class ResourceLoader {

  /**
   * クラスパスより指定されたファイル名のプロパティファイルをロードし、{@link Properties}オブジェクトにして返す。
   * 
   * @param confFile ロードするプロパティファイル名。
   * @return ロードしたプロパティ。
   */
  public static Properties loadProperties(String confFile){
    InputStream is = null;
    try{
      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
      is = classLoader.getResourceAsStream(confFile);
      if(is == null) throw new IllegalArgumentException(confFile + " cannot be found in your classpath!");
      Properties props = new Properties();
      props.load(is);
      return props;
    }
    catch(IOException e){
      throw new RuntimeException(e);
    }
    finally{
      IOUtils.closeQuietly(is);
    }
  }
  
  /**
   * クラスパスより指定されたファイル名のテキストファイルをロードし、{@link String}のリストを返す。エンコーディングはUTF-8のみサポート。
   * "#"で始まる行はコメントとして無視する（コメントとみなすのは"#"が最初にある場合のみ）。
   * 
   * @param file ロードするテキストファイル名。
   * @return 読み込んだテキストファイルの行データ。
   */
  public static List<String> loadStrList(String file){
    InputStream is = null;
    InputStreamReader isr = null;
    BufferedReader br = null;
    try{
      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
      is = classLoader.getResourceAsStream(file);
      if(is == null) throw new IllegalArgumentException(file + " cannot be found in your classpath!");
      List<String> strList = new ArrayList<String>();
      isr = new InputStreamReader(is, "UTF-8");
      br = new BufferedReader(isr);
      String line = null;
      while((line = br.readLine()) != null){
        String tl = line.trim();
        if(!tl.startsWith("#"))
          strList.add(line.trim());
      }
      return strList;
    }
    catch(IOException e){
      throw new RuntimeException(e);
    }
    finally{
      IOUtils.closeQuietly(br);
      IOUtils.closeQuietly(isr);
      IOUtils.closeQuietly(is);
    }
  }

  /**
   * クラスパスより指定されたファイル名のファイルを{@link InputStream}オブジェクトで返す。
   * 
   * @param file {@link InputStream}でオープンするファイル名。
   * @return オープンしたファイル。
   */
  public static InputStream getFileAsStream(String file){
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    InputStream is = classLoader.getResourceAsStream(file);
    if(is == null) throw new IllegalArgumentException(file + " cannot be found in your classpath!");
    return is;
  }
}

@@ -104,32 +104,64 @@
 BufferedReader;%0A
+import java.io.FileInputStream;%0A
 import java.io.I
@@ -2713,11 +2713,755 @@
  is;%0A  %7D
+%0A%0A  /**%0A   * %E3%82%AF%E3%83%A9%E3%82%B9%E3%83%AD%E3%83%BC%E3%83%80%E3%83%BC%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%9B%E3%81%9A%E3%80%81%E6%8C%87%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%9F%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%EF%BC%88%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E5%90%8D%E3%82%92%E5%90%AB%E3%82%93%E3%81%A7%E3%82%88%E3%81%84%EF%BC%89%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%80%81%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%80%E8%A6%A7%E3%82%92%E8%BF%94%E3%81%99%E3%80%82%0A   * @since 0.2%0A   */%0A  public static List%3CString%3E getStringList(String file, String encoding) throws IOException %7B%0A    InputStream is = null;%0A    InputStreamReader isr = null;%0A    BufferedReader br = null;%0A    %0A    try%7B%0A      is = new FileInputStream(file);%0A      isr = new InputStreamReader(is, encoding);%0A      br = new BufferedReader(isr);%0A      %0A      List%3CString%3E resultSet = new ArrayList%3CString%3E();%0A      String line = null;%0A      while((line = br.readLine()) != null)%7B%0A        resultSet.add(line.trim());%0A      %7D%0A      return resultSet;%0A    %7D%0A    finally%7B%0A      IOUtils.closeQuietly(br);%0A      IOUtils.closeQuietly(isr);%0A      IOUtils.closeQuietly(is);%0A    %7D%0A  %7D
 %0A%7D%0A

fix #10: add missing method to ResourceLoader